AES 加密和输入字符串编码

有人可以解释一下为什么这两段代码没有给出相同的结果,而第二个示例中的 StreamWriter 使用的是 UTF8 编码:


var TokenEncryptKey = "D268197CF891452844441A143AAEAAEB";

        var key = Encoding.UTF8.GetBytes(TokenEncryptKey);


        var alg = new RijndaelManaged();

        alg.Key = key;

        alg.Mode = CipherMode.ECB;


        var mem = new MemoryStream();


        CryptoStream encryptStream = new CryptoStream(mem, alg.CreateEncryptor(), CryptoStreamMode.Write);


        var validReservation = Encoding.UTF8.GetBytes("AAAAAAAAAAAAAAAAAAAAAAA");

        encryptStream.Write(validReservation, 0, validReservation.Length);

        encryptStream.Flush();

        encryptStream.FlushFinalBlock();


        Console.Out.WriteLine(Convert.ToBase64String(mem.GetBuffer(), 0, (int)mem.Length));

第二个例子


var TokenEncryptKey = "D268197CF891452844441A143AAEAAEB";

        var key = Encoding.UTF8.GetBytes(TokenEncryptKey);


        var alg = new RijndaelManaged();

        alg.Key = key;

        alg.Mode = CipherMode.ECB;


        var mem = new MemoryStream();


        CryptoStream encryptStream = new CryptoStream(mem, alg.CreateEncryptor(), CryptoStreamMode.Write);


        StreamWriter sw = new StreamWriter(encryptStream, Encoding.UTF8);

        sw.Write("AAAAAAAAAAAAAAAAAAAAAAA");

        sw.Flush();

        encryptStream.FlushFinalBlock();


        Console.Out.WriteLine(Convert.ToBase64String(mem.GetBuffer(), 0, (int)mem.Length));



慕莱坞森
浏览 275回答 1
1回答

凤凰求蛊

当您使用 时StreamWriter(encryptStream, Encoding.UTF8),这将添加 3 个字节的 Unicode BOM(字节顺序标记)。为避免这种情况,请new StreamWriter(m, new UTF8Encoding())改用。Encoding.UTF8.GetBytes即使设置了编码来执行此操作,也不会添加 BOM - 如果需要,您可以使用它来检索它GetPreamble。
打开App,查看更多内容
随时随地看视频慕课网APP