C# 随机生成十六进制数
如何使用 C# 生成具有我选择的长度的随机十六进制数?
How can I generate a random hexadecimal number with a length of my choice using C#?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何使用 C# 生成具有我选择的长度的随机十六进制数?
How can I generate a random hexadecimal number with a length of my choice using C#?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
random.Next() 接受可让您指定最小值和最大值的参数,这样您就可以控制长度。
random.Next()
takes arguments that let you specify a min and a max value, so that's how you would control the length.取决于您想要的随机程度,但这里有 3 个替代方案:
我通常只使用 Guid.NewGuid 并选择其中的一部分(取决于我想要的数字大小)。
如果您只想“足够随机”,System.Random(请参阅其他回复)很好。
系统.Security.Cryptography.RNGCryptoServiceProvider
Depends on how random you want it, but here are 3 alternatives:
I usually just use Guid.NewGuid and pick a portion of it (dep. on how large number I want).
System.Random (see other replies) is good if you just want 'random enough'.
System.Security.Cryptography.RNGCryptoServiceProvider
我需要类似于 Python 的
secrets.token_hex
< /a> 函数。如果您需要加密安全的随机字节,可以使用
System.Security.Cryptography
命名空间中的RNGCryptoServiceProvider
,如下所示:要将字节数组转换为十六进制字符串,使用 LINQ 似乎是最易读的选项:
输出可能如下所示:
I needed something similar to Python's
secrets.token_hex
function.If you need random bytes that are cryptographically secure, you can use
RNGCryptoServiceProvider
in theSystem.Security.Cryptography
namespace, like so:To convert the byte array to a hexadecimal string, using LINQ seems like the most readable option:
The output might look like this:
....使用 LINQ
.... with LINQ
如果您希望它是加密安全的,您应该使用 RNGCryptoServiceProvider。
If you want it to be a cryptographically secure you should use RNGCryptoServiceProvider.
下面的代码将返回 256 位十六进制字符串 (8x8=256):
Here's one that would return a 256-bit hex string (8x8=256):
从 2023 年 11 月 14 日至 16 日发布的 .NET 8 开始,您可以使用 System.Security.Cryptography 中的新方法:
Microsoft 声明:
这应该是前进的最佳方法。
As of .NET 8, which releases Nov. 14-16, 2023, you can use the new method from
System.Security.Cryptography
:Microsoft states that:
This should be the best method moving forward.
创建一个 n 字符(~n/2 字节),随机的十六进制字符串:
您考虑过 Base64 字符串吗? 根据您的应用程序,它们通常更有用。 它们保证是 ASCII 并为每个输入字节提供约 4/3 个字符。 要创建 n 个字符的字符串:
显然,如果您的应用程序不需要奇数个十六进制字符或不是 4 个字符的倍数的 Base64,则可以省略 .Substring(0,n)。
正如其他海报所建议的那样,可以通过将 Random() 静态化来随意扩展示例。
Create an n character (~n/2 byte), random string of hex:
Have you considered Base64 strings? Depending on your application, they can often more useful. They're guaranteed to be ASCII and provide ~4/3 characters per input byte. To create an n character string:
Obviously, you can omit the .Substring(0,n) if your application does not require either an odd number of hex characters or a Base64 that is not a multiple of 4 characters.
Feel free to extend the examples by making Random() static, as other posters have suggested.