如何从内部代码生成 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("-", "");