我正在写一个.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;
}
答案 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。
对于解密本身,您可以使用RijndaelManaged
,KeySize
设置为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。