使用最初在Foxpro中加密的C#解密字符串

时间:2011-08-29 17:18:08

标签: c# encryption foxpro

我正在写一个.Net MVC程序,它必须能够读取由Foxpro应用程序加密的字符串。如果我从一开始就进行加密和解密,没问题。我不知道foxpro的Encrpyt和Decrypt方法在做什么,知道如何在C#中应用相同的加密和解密方法。

以下是foxpro中对Encrypt的调用。

encyptedString = ENCRYPT(saltString + unencryptedString, secretkey_aes256,2,0)

这是在foxpro中调用Decrypt(第二行删除盐)

unencryptedString = DECRYPT(encryptedString, secretkey_aes256,2,0)
unencryptedString = SUBSTR(unencryptedString, LEN(saltString) + 1)

我显然知道saltString和secretkey_aes256的值,是的aes256是一个线索,但我不知道参数2和0在做什么。

认为有人可以解决这个谜题,也许对他们来说,这甚至都不是一个谜。我一直在研究它几个小时,我只是不够精明加密和解密到目前为止。

感谢任何帮助。

修改

如果2表示AES256而0表示ECB,那么我对下面的代码做错了什么线索?

public string DecryptString(string encrypted)
        {
            RijndaelManaged myAES = new RijndaelManaged();
            myAES.KeySize = 256;
            myAES.BlockSize = 256;
            myAES.Mode = CipherMode.ECB;
            myAES.Padding = PaddingMode.None;

            byte[] _key = ASCIIEncoding.UTF8.GetBytes(_secret);

            myAES.Key = _key;

            byte[] encrypted_bytes = ASCIIEncoding.UTF8.GetBytes(@encrypted.Trim());

            ICryptoTransform decrypto = myAES.CreateDecryptor();

            string decrypted = "";

            decrypted = ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encrypted_bytes, 0, encrypted.Trim().Length));

            return decrypted;
        }

3 个答案:

答案 0 :(得分:1)

VFP没有内置的加密和解密功能,因此编写代码的人使用的是第三方产品。 Chris Diver可能是Craig Boyd的VFPEncryption.FLL。以下是该库的最新文档:http://www.sweetpotatosoftware.com/spsblog/2009/08/09/MajorVFPEncryptionUpdate.aspx

答案 1 :(得分:0)

由于没有足够的信息,您需要进行一些实验才能找到正确的BlockSize(256位?)和IV,我认为它全部设置为0x00。

对于解密本身,您可以使用RijndaelManagedKeySize设置为256位,Mode设置为ECB - 一个好的起点是http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx < / p>

答案 2 :(得分:0)

AES256的块大小为128位,密钥大小为256位。因此,您需要将RijndaelManaged实例的blocksize设置为128, not 256。