Мне нужно расшифровать строку в C #, которая была зашифрована с помощью библиотеки Security::rijndael
CakePHP.
Строка шифруется в PHP следующим образом:
base64_encode(Security::rijndael($pw, Configure::read('SecretKey'), 'encrypt'))
Полученная кодировка имеет длину 88 символов и сохраняется в БД.
Вот как я пытаюсь расшифровать его в C #:
public static string Decrypt(string encode, string secretKey)
{
var sha = SHA256Managed.Create();
var saltBytes = sha.ComputeHash(Encoding.ASCII.GetBytes(secretKey));
var key = new Rfc2898DeriveBytes(secretKey, saltBytes);
var rm = new RijndaelManaged();
rm.Mode = CipherMode.CBC;
rm.KeySize = 256;
rm.BlockSize = 256;
rm.Key = key.GetBytes(rm.KeySize / 8);
rm.IV = key.GetBytes(rm.BlockSize / 8);
var decryptor = rm.CreateDecryptor(rm.Key, rm.IV);
var cipher = Convert.FromBase64String(encode);
string decrypted;
using (var msDescrypt = new MemoryStream(cipher))
{
using (var csDescrypt = new CryptoStream(msDescrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDescrypt = new StreamReader(csDescrypt))
{
decrypted = srDescrypt.ReadToEnd();
}
}
}
return decrypted;
}
При чтении потока я получаю исключение «Длина данных для расшифровки неверна». Нужно ли манипулировать входящей закодированной строкой, чтобы это работало?