我想在 PHP 中使用 openssl 解密一个加密的字符串,
使用以下代码在 C# 中加密字符串:
private static MemoryStream MsEncrypt = null;
private static CryptoStream CsEncrypt = null;
public static string EncryptStringToBytes(string plainText, byte[] key)
{
using (var rijndaelConfig = new RijndaelManaged())
{
rijndaelConfig.Key = key;
rijndaelConfig.Mode = CipherMode.CBC;
rijndaelConfig.BlockSize = 128;
rijndaelConfig.Padding = PaddingMode.Zeros;
rijndaelConfig.GenerateIV();
var encryptor = rijndaelConfig.CreateEncryptor(rijndaelConfig.Key,
rijndaelConfig.IV);
byte[] encrypted;
try
{
MsEncrypt = new MemoryStream();
CsEncrypt = new CryptoStream(MsEncrypt, encryptor, CryptoStreamMode.Write);
using (var swEncrypt = new StreamWriter(CsEncrypt))
{
swEncrypt.AutoFlush = true;
swEncrypt.Write(plainText);
}
encrypted = MsEncrypt.ToArray();
byte[] result = new byte[rijndaelConfig.IV.Length + encrypted.Length];
rijndaelConfig.IV.CopyTo(result, 0);
encrypted.CopyTo(result, rijndaelConfig.IV.Length);
return Uri.EscapeDataString(Convert.ToBase64String(result));
}
finally
{
if (MsEncrypt != null)
{
MsEncrypt.Dispose();
}
if (CsEncrypt != null)
{
CsEncrypt.Dispose();
}
}
}
}
这是我的钥匙:“2b8958eb1da990c039933a504259059fc9c8a893447fcbb3a8c504797e637288”
这是我的字符串:“你好[[]]那里!”
这是加密值“O0wTQerC%2FQs5sFUMc3uXoSkrsJcY7toWqlsQYRYAD64%3D”
这是小提琴 (C#) 中一个有效的加密和解密函数:https://dotnetfiddle.net/9BKh5J
这是迄今为止我在 php 中尝试过的加密方法:
function decrypt($text,$key){
$encrypted = base64_decode($text);
$key = unpack('C*', $key);
$key = implode('',$key);
$decrypted = openssl_decrypt($encrypted, 'aes-128-cbc', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING );
return rtrim($decrypted, "\0");
}
这是php小提琴:https://paiza.io/projects/zwXd611Gw5snUclFMjebEw
但我得到一个空字符串,知道为什么吗?