Я нашел следующий метод для Inte rnet, который я использую для расшифровки.
public static string DecryptString(string cipherText, string passPhrase, string initVector)
{
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
symmetricKey.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
Итак, этот метод получает зашифрованный текст, пароль и IV (в виде 16 символов) длинная строка). Например: Пароль: test IV: hCIoZVI5lrtCgdNo Зашифрованное сообщение: SeQUquUrE8W3rUqvYQe6oA ==
С помощью вышеупомянутого метода я могу успешно расшифровать сообщение (результат должен быть "test").
Теперь я попытался использовать openssl_decrypt () в PHP, чтобы также иметь возможность расшифровывать зашифрованные сообщения в PHP. Но это не работает. Я использовал это:
$encrypted = "SeQUquUrE8W3rUqvYQe6oA==";
$password = "test";
$iv = "hCIoZVI5lrtCgdNo";
echo openssl_decrypt($encrypted, 'aes-256-cbc', $password, 0, $iv);
Но это не работает? Вы можете помочь мне? Спасибо!