AES256加密,根据输入输出字符......为什么?

时间:2017-05-19 09:04:23

标签: c# encryption encoding aes

我正在使用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”

2 个答案:

答案 0 :(得分:0)

因为AES不会处理字符或字符串,只能处理字节。

如果您希望能够在文本编辑器中查看结果,则必须对输出的字节进行编码。

其中一个编码器是base64编码器。

哪个会输出一个人类可读的#34;字符串。

答案 1 :(得分:0)

我找到了探测器...我是一个白痴......当输入是纯文本时我调用了Convert.ToBase64String函数......我没有看到这个。

对不起。

Thans