0

Hello Everyone!

My problem is this. I have a VBscript encrypting passwords using capicom.dll RC2. I want to use C# to decrypt this password. Which I can't get to work for the life of me. Keeps coming back saying 'Specified key is not a valid size for this algorithm.'

(but i can decrypt in vbscript without an issue! >.<)

Below is how I encrypt the data and how I'm trying to decrypt the data in C#

classic ASP/VBscript Code
ENCRYPT

Function AESEncrypt(ByVal String)

    if isnull(String) or String="" then
        AESEncrypt=""
    else
        set fs=Server.CreateObject("Scripting.FileSystemObject")
        path=fs.GetAbsolutePathName("c:\test.txt")
        if fs.FileExists(path) then
            On Error Resume Next
            Err.Clear
            set f=fs.OpenTextFile("c:\test.txt",1)
            KeyLine=f.ReadLine
            f.Close
            Set f = Nothing
            if Err.Number<>0 then
                Response.Write("Configuration Error 308.3: unable to read encryption file")
                Response.End
            end if
            Err.Clear
            Set Ce=CreateObject("CAPICOM.EncryptedData")           
            Ce.Content=String
            Ce.SetSecret(KeyLine)

            AESEncrypt=Ce.Encrypt

            Set Ce = Nothing ' Clear from memory
            if Err.Number<>0 then
                Response.Write("Configuration Error 308.31: password encryption error")
                Response.End
            end if
        else
            Response.Write("Configuration Error 308.4: encryption file does not exist")
            Response.End
        end if
        Set fs = Nothing

    end if

End Function

DECRYPT

Function AESDecrypt(ByVal String)
    if isnull(String) or String="" then
        AESDecrypt=""
    else
        set fs=Server.CreateObject("Scripting.FileSystemObject")
        path=fs.GetAbsolutePathName("c:\test.txt")
        if fs.FileExists(path) then
            On Error Resume Next
            Err.Clear
            set f=fs.OpenTextFile("c:\test.txt",1)
            KeyLine=f.ReadLine
            f.Close
            Set f = Nothing
            if Err.Number<>0 then
                Response.Write("Configuration Error 308.5: unable to read encryption file")
                Response.End
            end if
            Err.Clear
            Set Cd=CreateObject("CAPICOM.EncryptedData")           
            Cd.SetSecret(KeyLine)
            Cd.Decrypt(String)

            AESDecrypt=Cd.Content

            Set Cd = Nothing ' Clear from memory
            if Err.Number<>0 then
                Response.Write("Configuration Error 308.51:  password decryption error")
                Response.End
            end if
        else
            Response.Write("Configuration Error 308.6:  encryption file does not exist")
            Response.End
        end if
        Set fs = Nothing
    end if

End Function

The C# Code

public string DecryptAES(string strInput)
        {
            StreamReader reader = new StreamReader("C:\\test.txt");
            string strKey = reader.ReadLine();
            reader.Close(); reader.Dispose();//close/remove

            byte[] byteInput = Encoding.ASCII.GetBytes(strInput);
            byte[] byteKey = Encoding.ASCII.GetBytes(strKey);
            MemoryStream MS = new MemoryStream();
            RC2CryptoServiceProvider RC2 = new RC2CryptoServiceProvider();
            CryptoStream CS = new CryptoStream(MS, RC2.CreateDecryptor(byteKey, RC2.IV), CryptoStreamMode.Write);
            CS.Write(byteInput, 0, byteInput.Length);
            CS.FlushFinalBlock();
            return Encoding.UTF8.GetString(MS.ToArray());
        }

Any pointers or help would be great, I've tried so many things, which I don't even know where to start if i would list them all haha.

2
Contributors
1
Reply
3
Views
6 Years
Discussion Span
Last Post by skatamatic
0

While not being too keen on encryption algorithms, I can tell you that it seems like you are referencing two different encryption classes between VB.NET and C#.

Maybe you should consider using the same libraries, since they should both be compatible between the .Net languages.

This might be of use

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.