Моя структура для шифрования/дешифрования С# выглядит следующим образом:
- Шифр: Rijndael (AES)
- Размер блока: 128 бит (16 байт).
- Режим: CBC (цепочка блоков шифрования)
- Ключ: хеш-фраза MD5.
- IV: то же, что и ключ.
- Кодировка данных: символ Base64
- Кодировка UTF-8
Я использую вход Player
для обоих входов в качестве теста, однако он не возвращает правильный хеш-выход MD5, а также есть небольшая проблема с моей функцией Decrypt
для byte[] toEncryptArray = Convert.FromBase64String (toDecrypt);
.
Неправильный вывод хэша и ошибка
playerID: Зашифрованный плеер: ZCKgr4veKtCDrD6mL+P6Yg==
FormatException: Неверная длина. System.Convert.FromBase64String (System.String s) (в /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System/Convert.cs:146) APIConnector.Decrypt (System.String toDecrypt) (в Assets /APIConnector.cs:122)
Любые идеи о том, что я могу сделать, чтобы 1) исправить эту ошибку и 2) получить правильный вывод хэша на основе приведенной выше структуры ym? Спасибо!
void submit(){
Debug.Log ("playerID is: " + firstName + " encrypted is: " + Encrypt(firstName));
Debug.Log ("password is: " + password + " decrypted is: " + Decrypt(password));
}
public static string Encrypt (string toEncrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("SecretPassphrase");
// 256-AES key
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes (toEncrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.IV = keyArray;
rDel.Mode = CipherMode.CBC;
rDel.BlockSize = 128;
// http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
rDel.Padding = PaddingMode.PKCS7;
// better lang support
ICryptoTransform cTransform = rDel.CreateEncryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String (resultArray, 0, resultArray.Length);
}
//
public static string Decrypt (string toDecrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("SecretPassphrase");
// AES-256 key
byte[] toEncryptArray = Convert.FromBase64String (toDecrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.IV = keyArray;
rDel.Mode = CipherMode.CBC;
rDel.BlockSize = 128;
// http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
rDel.Padding = PaddingMode.PKCS7;
// better lang support
ICryptoTransform cTransform = rDel.CreateDecryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString (resultArray);
}