您好,我正在嘗試使用PHP和AES加密我的服務器上的文件/字符串256 CBC模式, 由於字符串以'\ 0'結尾,我可以很容易地從它們中刪除填充, ,但與文件我不能因爲其中一些包含空字節。在我發送數據之前,我將它編碼爲base64字符串。C#PHP AES 256 CBC加密
這裏是我的C#解密函數
internal static byte[] __AES_DECRYPT(byte[] input, string _key, string _iv)
{
var myRijndael = new RijndaelManaged()
{
Padding = PaddingMode.Zeros,
Mode = CipherMode.CBC,
KeySize = 256,
BlockSize = 256
};
byte[] key = Encoding.ASCII.GetBytes(_key);
byte[] iv = Encoding.ASCII.GetBytes(_iv);
var decryptor = myRijndael.CreateDecryptor(key, iv);
var sEncrypted = input;
var fromEncrypt = new byte[sEncrypted.Length];
var msDecrypt = new MemoryStream(sEncrypted);
var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return fromEncrypt;
}
此功能工作正常的字符串和字節太多。 我相信PHP加密函數對於文件來說是錯誤的,但對字符串起作用。
function encrypt($str)
{
$key = 'keygoeshere';
$iv = "ivgoeshere";
$str =mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $str, MCRYPT_MODE_CBC, $iv);
//$str = str_replace("\0","",$str); this works for strings but not files.
return base64_encode($str);
}
'MCRYPT_RIJNDAEL_256'不是AES。 –