我正在使用VS使用此函数加密一些数据:
public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
byte[] encryptedBytes = null;
// Set your salt here, change it to meet your flavor:
// The salt bytes must be at least 8 bytes.
byte[] saltBytes = new byte[] { 6, 99, 26, 12, 68, 22, 89, 12, 49, 55, 92, 82, 87, 86, 10, 75, 98, 122, 73 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 256;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
cs.Close();
}
encryptedBytes = ms.ToArray();
}
}
return encryptedBytes;
}
我的问题是,为什么当我放置纯文本来加密输出时,输出仅包含可以使用任何文本处理器(如记事本(查看的可读字符,但是,如果要加密的数据来自包含特殊字符的文件,则输出现在还包含无法从文本处理器查看的特殊字符...为什么???
加密"hello"的示例"fMIiLZzIKME2gTAarpQqP7y8kOjQvDS12lSOOBtaCbI=">
加密二进制数据的示例:"b!, ̃à4ovƒº1úlÔÊ jô†õ ;>²Ñ(j¦¹'åüLÖN—nU+5
因为 AES 不处理字符或字符串,只处理字节。
如果您确实希望能够在文本编辑器中查看结果,则必须对输出的字节进行编码。
其中一个这样的编码器将是base64编码器。
这将输出一个人类"可读"的字符串。
我找到了探针...我是个白痴...我有一个 Convert.ToBase64String 函数,当输入是纯文本时调用...我没有看到这个。
不好意思。
坦斯