AES256加密,输出字符取决于输入.为什么



我正在使用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 函数,当输入是纯文本时调用...我没有看到这个。

不好意思。

坦斯

最新更新