从加密数据中删除ASCII或Unicode字符



我正在尝试使用C#获取存储在MySQL数据库中的加密代码。有时代码很好,但有时我会在解密代码的末尾得到一些ASCII和Unicode字符。

我知道,由于加密/解密过程,你会得到一些额外的字符;问题是这些字符不一致(不像我总是在末尾得到一堆\0(。

codeA
codeBu0010u0010u0010u0010u0010u0010u0010u0010u0010
codeCbbbbbbbbb
codeDu0003u0003u0003u0003u0003u0003u0003u0003u0003

我有不同的结尾字符,老实说,很难为每个碰巧出现的字符添加"替换"方法。

有没有办法去掉结尾的那些"特殊"字符?或者我只是存储/读取错误的代码?

我为PHP(网页utf-8,代码的编写者(和C#(控制台应用程序,代码的阅读器(编写流程

PHP

// Get $code from html form in utf-8
$code = $_POST['code'];
$encrypted_code = base64_encode(openssl_encrypt($code, 'aes-256-ecb', 'keykeykeykeykeykeykeykey', OPENSSL_RAW_DATA)));
// Store $encrypted_code into database

C#

// Read encrypted_code from database using MySqlConnection
Aes aes = Aes.Create();
aes.Key = Encoding.UTF8.GetBytes("keykeykeykeykeykeykeykey");
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.None;
aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
string code = null;
using (aes)
{
byte[] encrypted_code = Convert.FromBase64String(encrypted_code);
using (var encrypted_stream = new MemoryStream(encrypted_code))
using (var decrypter_stream = new CryptoStream(encrypted_stream, decryptor, CryptoStreamMode.Read))
using (var decrypted_stream = new StreamReader(decrypter_stream))
code = decrypted_stream.ReadLine().
Replace("", string.Empty).
Replace("b", string.Empty).
Replace("v", string.Empty).
Replace("t", string.Empty).
Replace("u0010", string.Empty).
Replace("u0003", string.Empty).
Replace("u0006", string.Empty);
}
//Use code for whatever

默认情况下,您选择的PHP加密方法会添加填充,返回类似"CodeA\0\0\0\0\0"的数据结果。为了在没有填充的情况下返回解密数据,只需将C#代码中的PaddingMode更改为:

aes.Padding = PaddingMode.PKCS7;


BTW:此代码:$encrypted_code = openssl_encrypt($code, 'aes-256-ecb', 'keykeykeykeykeykeykeykey');

生成与此代码相同的代码:$encrypted_code = base64_encode(openssl_encrypt($code, 'aes-256-ecb', 'keykeykeykeykeykeykeykey', OPENSSL_RAW_DATA));