Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于fips186-2的伪随机数发生器_C#_.net_Cryptography_Encryption - Fatal编程技术网

C# 基于fips186-2的伪随机数发生器

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都会很乐意为您填充任意

大家好,我需要根据给定密钥在.net中基于FIPS 186-2生成一个随机数(160字节)(可以在RFC 4186 eap sim实现中找到讨论)。我所知道的是,FIPS186-2在.net上实现为DSA,将提供40字节的签名字节,而不是160字节。有人能告诉我我做错了什么吗

不是我的领域,但我认为FIPS186使用160bit键和盐(或种子)。只有20个字节


在任何情况下,
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.BigInteger

160字节还是160位?更好的检查。让我检查一下RFC 4186上关于文档如何得出1280位哈希值的过程。是的,这就是我要找的,我没有任何密码学背景。工作的最大部分将是SHA-1压缩函数。一个很好的起点是:我已经读了很多关于这种压缩的书,现在我正在寻找在添加一些填充之前的那个部分,基于我的理解,我不应该使用上面讨论的相同的散列来添加填充。