C#PHP AES 256 CBC加密

您好我正在尝试使用PHP和AES 256 CBC模式加密我服务器上的文件/字符串,因为字符串以’\ 0’结尾我可以轻松地从AES添加的填充中删除填充,但是文件我不能,因为其中一些包含空字节。 在发送数据之前,我将其编码为base64字符串。

这是我的C#decrypt函数

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); } 

如果您不想更改为其他forms的填充,只需在文件内容的末尾附加单个1字节,并在解密后删除任何尾随空值,然后删除附加的1个字节。 您不会意外删除属于该文件的任何0字节。