Расшифровать строку в C #, которая была зашифрована с помощью CakePHP - PullRequest
0 голосов
/ 26 января 2019

Мне нужно расшифровать строку в 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;
}

При чтении потока я получаю исключение «Длина данных для расшифровки неверна». Нужно ли манипулировать входящей закодированной строкой, чтобы это работало?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...