我正在尝试创建256位密钥并在AES加密中使用它,我需要将其存储在我的web.config文件中,因此必须将其转换为字符串。
因此,例如方法签名如下:
public static string SimpleEncrypt(string secretMessage, byte[] cryptKey, byte[] authKey,
byte[] nonSecretPayload = null)
我尝试了以下内容,但它返回了有趣的角色:
var hmac = new HMACSHA256();
var keyHex = System.Text.Encoding.UTF8.GetString(hmac.Key);
我需要创建一个类似的秘密密钥,因为它也是256位,我需要存储在web.conf文件中。
希望有人可以帮助我
答案 0 :(得分:4)
作为一般规则,当需要将任意二进制数据存储为文本时(例如,将字节数组存储为属性文件中的文本),则应使用更便携的二进制数据形式。
有很多这些,使用取决于开发人员的偏好,预期用途,性能问题等。
目前最常用的二进制数据便携式存储格式为Base 64(https://en.wikipedia.org/wiki/Base64)。将字节存储到文本文件时,应将字节转换为Base64字符串,并在将其加载到代码中时将其转换回字节。
在C#中,使用的实现会因实际平台而异,而且您总能找到许多可提供此实现的库。例如,在某些版本的.NET框架中,您可以使用https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110).aspx和https://msdn.microsoft.com/en-us/library/system.convert.frombase64string(v=vs.110).aspx
答案 1 :(得分:0)
您向类询问它用于实例化HMACSHA256的密钥。 HMACSHA256的Key
属性为:
获取或设置要在哈希算法中使用的键。 (继承自HMAC。)
如果没有指定密钥,.NET类将生成自己的随机密钥。然而,密钥使用作为输入参数用于HMAC功能(可以使用任何大小的密钥),不 HMAC的输出,这将是256位。
如果您想要新生成的密钥,则应使用RNGCryptoServiceProvider
的实例来生成256位(32字节)的随机密钥。然后,您可以将这些字节直接用作您正在使用的AES类中的键值。
如果要将密钥存储为文本,则需要将其编码为十六进制或基数为64.如果直接将其视为文本,则会得到随机(“有趣”)字符,这就是只有如果这些字节可以显示为可打印的字符。