基于FIPS的伪随机数生成器186-2
嗨,大家好,我需要根据给定的密钥在.net中根据FIPS 186-2生成一个随机数(160字节)(讨论可以在RFC 4186上找到) - 实现)。我知道FIPS 186-2是作为DSA在.net上实现的,它将提供40字节的签名字节而不是160.有人能告诉我我做错了什么吗?基于FIPS的伪随机数生成器186-2
您需要在RFC 4186附录B(或FIPS 186-2的附录3)中实现该算法。在.NET框架中没有实现它。由于这种情况下的算法用于密钥推导,因此不能用另一个随机数生成器替换它。
在此过程中,您还需要重新实现大多数SHA-1,因为所需的G函数是SHA-1的压缩函数,无法从公共接口访问.NET框架。
好运:-)
Yap这就是我正在寻找的,我没有任何密码学背景开始。 – powerbox 2011-06-10 13:12:10
工作的最大部分将是SHA-1压缩功能。一个好的起点是这样的:http://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/crypto/digests/Sha1Digest.cs?view=markup – 2011-06-10 17:20:38
我已经读了很多关于这个压缩现在我正在寻找sha1添加一些填充之前的那部分,根据我的理解,我不应该使用上面讨论的相同散列来填充填充。 – powerbox 2011-06-10 21:15:26
不是我的区域,但我认为FIPS 186使用160 位键和盐(或种子)。这只有20个字节。
在任何情况下,System.Security.Cryptography.RandomNumberGenerator
都会为您快乐地填充任意长度的字节数组。密码工作被认为是安全的。
我修改找到的代码在SHA1 Source code
诀窍是垫与所述消息(512 - message.length在比特)SECURE HASH STANDARD
定义0代替填充如果散列消息是在六列使用:
message = message.PadRight((512/4),'0');
用于模和模运算我使用或g.BouncyCastle.Math.BigInteger
160字节或160位?更好地检查。 – 2011-06-10 09:32:44
让我检查RFC 4186上关于文档如何与1280位散列值一起出现的过程。 – powerbox 2011-06-10 09:53:26