今天在一個合作項目對接中遇到了不同技術平台的 AES 加解密問題,我們用的是 C#,合作方用的是 PHP,我們要把 AES 加密的密文傳給合作方用 PHP 進行解密。
在這篇隨筆中記錄一下今天下午折騰的小成果。(2021.11.5更新了下面的代碼,詳見博問 遭遇奇怪的 .NET 在 Linux 上的 AES 加密問題)
加解密算法用的是 aes-128-cbc
,.NET 用的是最新 .NET 6 RC 2,C# 加密代碼:
var aes = Aes.Create();
aes.Key = Encoding.ASCII.GetBytes(key);
var ivBytes = Encoding.ASCII.GetBytes(iv);
ReadOnlySpan<byte> plainTextBytes = Encoding.ASCII.GetBytes(plainText);
var cipherTextBytes = aes.EncryptCbc(plainTextBytes, ivBytes);
var cipherText = Convert.ToBase64String(ivBytes.Concat(cipherTextBytes).ToArray());
PHP 解密代碼:
$method = 'aes-128-cbc';
$key = 'xxx';
$iv = 'yyy';
$encrypted = '密文='
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv);
$decrypted = substr($decrypted, 16);