为了账号安全,请及时绑定邮箱和手机立即绑定

AES 加密和输入字符串编码

AES 加密和输入字符串编码

C#
慕莱坞森 2021-10-09 10:01:59
有人可以解释一下为什么这两段代码没有给出相同的结果,而第二个示例中的 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));
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

当您使用 时StreamWriter(encryptStream, Encoding.UTF8),这将添加 3 个字节的 Unicode BOM(字节顺序标记)。为避免这种情况,请new StreamWriter(m, new UTF8Encoding())改用。

Encoding.UTF8.GetBytes即使设置了编码来执行此操作,也不会添加 BOM - 如果需要,您可以使用它来检索它GetPreamble


查看完整回答
反对 回复 2021-10-09
  • 1 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信