使用 AesCng 生成 AES 加密密钥
Posted
技术标签:
【中文标题】使用 AesCng 生成 AES 加密密钥【英文标题】:AES encryption key generation using AesCng 【发布时间】:2021-04-11 05:19:12 【问题描述】:我正在使用AesCng
使用以下代码生成加密密钥:
using System;
using System.Security.Cryptography;
using System.Text;
namespace EncryptionTest
class Program
static void Main(string[] args)
Console.WriteLine(Encoding.UTF8.GetString(GenerateKey()));
static byte[] GenerateKey()
using (AesCng cng = new AesCng())
cng.GenerateKey();
return cng.Key;
当我检查控制台中的密钥时,它显示为r?▬?^?-?▲?ZQ^???♥$)??8w?f▬?[??
看起来有些字符没有得到解决。有人可以帮我理解我做错了什么吗?
【问题讨论】:
你有一个byte[]
并且似乎你想要打印字符串表示。我想你会想使用Convert.ToBase64String(GenerateKey())
【参考方案1】:
AES 密钥只是一系列字节。不保证这些字节是可打印的字符,无论是 UTF8、ASCII 还是任何其他字符编码。这是正常的,生成的key没有问题。
一般来说,如果你想将一系列任意字节转换成可打印的字符串,你会使用 Base-64 编码,像这样:
Console.WriteLine(Convert.ToBase64String(GenerateKey()));
这会给你一个类似这样的输出:
VX/oYK1P5LQAH5MqiRHyNDtZyNcQGEUpIRpnpsY+buk=
小提琴:https://dotnetfiddle.net/5bDi0c
有关更多信息和示例,请参阅 Convert.ToBase64String(byte[])
和 Convert.FromBase64String(string)
。
【讨论】:
所以,回答 OP 的问题:你没有做错任何事。你看到的钥匙没问题。以上是关于使用 AesCng 生成 AES 加密密钥的主要内容,如果未能解决你的问题,请参考以下文章