C# 基于fips186-2的伪随机数发生器
大家好,我需要根据给定密钥在.net中基于FIPS 186-2生成一个随机数(160字节)(可以在RFC 4186 eap sim实现中找到讨论)。我所知道的是,FIPS186-2在.net上实现为DSA,将提供40字节的签名字节,而不是160字节。有人能告诉我我做错了什么吗 不是我的领域,但我认为FIPS186使用160bit键和盐(或种子)。只有20个字节C# 基于fips186-2的伪随机数发生器,c#,.net,cryptography,encryption,C#,.net,Cryptography,Encryption,大家好,我需要根据给定密钥在.net中基于FIPS 186-2生成一个随机数(160字节)(可以在RFC 4186 eap sim实现中找到讨论)。我所知道的是,FIPS186-2在.net上实现为DSA,将提供40字节的签名字节,而不是160字节。有人能告诉我我做错了什么吗 不是我的领域,但我认为FIPS186使用160bit键和盐(或种子)。只有20个字节 在任何情况下,System.Security.Cryptography.RandomNumberGenerator都会很乐意为您填充任意
在任何情况下,
System.Security.Cryptography.RandomNumberGenerator
都会很乐意为您填充任意长度的字节数组。它被认为是安全的加密工作 您需要实施RFC 4186附录B中的算法(或者FIPS 186-2附录3)。在.NET framework中没有它的实现。由于本例中的算法用于密钥派生,因此不能用另一个随机数生成器替换它
在此过程中,您还需要重新实现大部分SHA-1,因为所需的G函数是SHA-1的压缩函数,无法从公共接口访问.NET framework
祝你好运:-)我修改了在中找到的代码 诀窍是用(512-message.length,单位为位)0填充消息,而不是中定义的填充 如果要哈希的消息是六进制字符串,请使用:
message = message.PadRight((512/4),'0');
对于模运算和指数运算,我使用Org.BouncyCastle.Math.BigInteger160字节还是160位?更好的检查。让我检查一下RFC 4186上关于文档如何得出1280位哈希值的过程。是的,这就是我要找的,我没有任何密码学背景。工作的最大部分将是SHA-1压缩函数。一个很好的起点是:我已经读了很多关于这种压缩的书,现在我正在寻找在添加一些填充之前的那个部分,基于我的理解,我不应该使用上面讨论的相同的散列来添加填充。