大家好我需要根据给定的密钥在.net中生成基于FIPS 186-2的随机数(160字节)(讨论可以在RFC 4186 eap-sim实现中找到)。我所知道的是,FIPS 186-2在.net上实现为DSA,它将提供40字节的签名字节而不是160.有人能告诉我我做错了什么吗?
答案 0 :(得分:2)
您需要在RFC 4186的附录B中实现该算法(或者替代FIPS 186-2的附录3)。 .NET框架中没有实现它。由于此情况下的算法用于密钥派生,因此不能将其替换为另一个随机数生成器。
在此过程中,您还需要重新实现大部分SHA-1,因为所需的G函数是SHA-1的压缩函数,无法从公共接口访问.NET框架。
祝你好运: - )答案 1 :(得分:1)
不是我的区域,但我认为FIPS 186使用160 位键和盐(或种子)。那只有20个字节。
在任何情况下,System.Security.Cryptography.RandomNumberGenerator
都会很乐意为您填充任意长度的字节数组。它对于加密工作来说是安全的。
答案 2 :(得分:0)
我修改了SHA1 Source code
中的代码技巧是填充消息(512 - message.length in bits)0而不是SECURE HASH STANDARD中定义的填充
如果要散列的消息是使用hexa字符串:
message = message.PadRight((512/4),'0');
对于模数和指数运算,我使用的是Org.BouncyCastle.Math.BigInteger