如何从内部代码生成 IIS machineKey?
How do I generate IIS machineKey from inside code?
我想要此 web.config 部分的随机值:
<machineKey validation="HMACSHA512" decryption="AES"
validationKey="I NEED VALUE FOR THIS"
decryptionKey="SOME KEY" />
我看到 IIS 管理器可以生成值,但在我拥有的版本中,下拉列表中没有 "HMACSHA512" 选项。所以我需要一些其他的方式。
我可以为此编写一些 C# 代码,但它究竟应该做什么?它应该只生成足够长的随机数并格式化吗?
我是否只使用 RNGCryptoServiceProvider
class 并生成一个适当长的字节数组,然后将其格式化为十六进制?这样行吗?
Do I just use RNGCryptoServiceProvider class and generate an appropriately long byte array and then format that as hex?
差不多。这就是当你将它设置为 AutoGenerate
.
时的 .NET Framework is doing
您可以使用RNGCryptoServiceProvider
生成一个适当长度的十六进制值。 HMACSHA512 使用 512 位值,即 64 字节或 128 个十六进制字符。所以我们可以这样做:
var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
var buffer = new byte[64];
rng.GetBytes(buffer);
var hmacKey = BitConverter.ToString(buffer).Replace("-", "");
我想要此 web.config 部分的随机值:
<machineKey validation="HMACSHA512" decryption="AES"
validationKey="I NEED VALUE FOR THIS"
decryptionKey="SOME KEY" />
我看到 IIS 管理器可以生成值,但在我拥有的版本中,下拉列表中没有 "HMACSHA512" 选项。所以我需要一些其他的方式。
我可以为此编写一些 C# 代码,但它究竟应该做什么?它应该只生成足够长的随机数并格式化吗?
我是否只使用 RNGCryptoServiceProvider
class 并生成一个适当长的字节数组,然后将其格式化为十六进制?这样行吗?
Do I just use RNGCryptoServiceProvider class and generate an appropriately long byte array and then format that as hex?
差不多。这就是当你将它设置为 AutoGenerate
.
您可以使用RNGCryptoServiceProvider
生成一个适当长度的十六进制值。 HMACSHA512 使用 512 位值,即 64 字节或 128 个十六进制字符。所以我们可以这样做:
var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
var buffer = new byte[64];
rng.GetBytes(buffer);
var hmacKey = BitConverter.ToString(buffer).Replace("-", "");