AaA*_*AaA 6 .net c c# rsa chinese-remainder-theorem
我需要使用C#实现RSA加密/解密
我有一个包含以下参数的私钥:
mod n
,exponent
,p
,q
,dP
,dQ
,和(p
-1
mod q)
以上参数在中文余数算法中进行了解释
但是,RSA的C#.NET实现具有以下不同的参数集:
Modulus
,Exponent
,P
, Q
,DP
,DQ
,D
,InverseQ
当我试图将数据映射CRT
到时DOTNET
,我得到错误Bad Data
对于 p
,q
,dP
以及dQ
映射是明显的,但有关的参数,其余的我不知道.
如果我可以获得映射这些参数的帮助,那就太棒了
mod n
映射到Modulus
,映射到,加密指数映射到,解密指数映射到.p
-1
mod q
InverseQ
Exponent
D
加密指数e
和解密指数d
通过e*d = 1 mod(p-1)(q-1)相关.因此,如果你有一个,你可以很容易地从System.Numerics.BigInteger类派生另一个使用一些方法.
var Pminus1 = BigInteger.Subtract(P, BigInteger.One);
var Qminus1 = BigInteger.Subtract(Q, BigInteger.One);
var Phi = BigInteger.Multiply(Pminus1, Qminus1);
var PhiMinus1 = BigInteger.Subtract(Phi, BigInteger.One);
// var D = BigInteger.ModPow(E, PhiMinus1, Phi);
Run Code Online (Sandbox Code Playgroud)
请注意,构建.NET BigInteger时必须小心,特别是如果您习惯使用Java的BigInteger类.有关更多信息,请参阅此问题.
编辑:
正如CodeInChaos指出的最后一行是错误的!
错误!错误!错误!
我很尴尬.在对邪恶势力的鞠躬中,BigInteger类没有模块化逆方法,也没有扩展的欧几里德算法方法.你可以谷歌搜索'c#extended euclidean algorithm'你可以找到很多实现.扩展的欧几里德算法将给出整数x和y,使得1 = e*x + phi*y.x是e mod phi的倒数,因此设置D = x mod phi是需要的.
归档时间: |
|
查看次数: |
2194 次 |
最近记录: |