Расшифруйте строку с C #, которая была изначально зашифрована в Foxpro - PullRequest
0 голосов
/ 29 августа 2011

Я пишу программу .Net MVC, которая должна иметь возможность читать строки, которые были зашифрованы приложением Foxpro. Если бы я делал шифрование и дешифрование с самого начала, никаких проблем. Я не знаю, что методы foxpro Encrpyt и Decrypt делают изнутри, чтобы знать, как применять те же методы шифрования и дешифрования в C #.

Вот вызов Encrypt в foxpro.

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

Вот вызов Decrypt в foxpro (вторая строка удаляет соль)

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

Я, очевидно, знаю значения для saltString и secretkey_aes256, и да, aes256 - подсказка, но я не знаю, что делают параметры 2 и 0.

Думал, что кто-то получит удовольствие от решения этой загадки, и, возможно, для них это даже не загадка. Я работал над этим пару часов, и я просто недостаточно разбираюсь с шифрованием и дешифрованием, чтобы понять это до сих пор.

Любая помощь приветствуется.

EDIT:

если 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 ]

1 голос
/ 30 августа 2011

VFP не имеет встроенного шифрования и дешифрования, поэтому любой, кто писал код, использовал сторонний продукт.Крис Дайвер, вероятно, прав, что это был VFPEncryption Крейга Бойда.Вот последняя документация для этой библиотеки: http://www.sweetpotatosoftware.com/spsblog/2009/08/09/MajorVFPEncryptionUpdate.aspx

0 голосов
/ 30 августа 2011

AES256 имеет размер блока 128 бит и размер ключа 256 бит. Поэтому вам нужно установить размер блока вашего экземпляра RijndaelManaged на 128, , а не 256.

0 голосов
/ 29 августа 2011

Поскольку информации недостаточно, вам понадобится немного поэкспериментировать, чтобы найти правильные значения BlockSize (256 бит?) И IV, я думаю, что все установлено на 0x00.

Для самого дешифрования вы можете использовать RijndaelManaged с KeySize, установленным на 256 бит и Mode, установленным на ECB - хорошая отправная точка - http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

...