仅使用几个值解密.NET中的RSA数据

仅使用几个值解密.NET中的RSA数据,.net,cryptography,rsa,.net,Cryptography,Rsa,我正在使用RSA的Javascript实现,并在那里生成了我的密钥对。因此,我有p,q,公共指数,公共模,私有指数和私有逆 如何使用.NET的rsacyptoserviceprovider仅使用这些值解密密文?.NET文档列出了其他三个字段DP、DQ和InverseQ,我不确定如何提供这些参数。似乎包含关于如何计算这些参数的说明,即 作为私钥一部分的值dp、dq和qInv计算如下: dp = d mod (p − 1) dq = d mod (q − 1) qInv = q^−1 mod p

我正在使用RSA的Javascript实现,并在那里生成了我的密钥对。因此,我有
p
q
,公共指数,公共模,私有指数和私有逆

如何使用.NET的
rsacyptoserviceprovider
仅使用这些值解密密文?.NET文档列出了其他三个字段
DP
DQ
InverseQ
,我不确定如何提供这些参数。

似乎包含关于如何计算这些参数的说明,即

作为私钥一部分的值dp、dq和qInv计算如下:

dp = d mod (p − 1)
dq = d mod (q − 1)
qInv = q^−1 mod p

RSA私钥(cf)有两种表示形式

第一个表示由一对(n,d)组成,第二个表示由一个五元组(p,q,dP,dQ,qInv)组成。公钥表示为(n,e)

  • n是公模
  • p和q是两个素数
  • d是私有指数
  • e是公众指数
  • dP是p的中国剩余定理系数(e·dP)≡ 1(国防部(p-1)))
  • dQ是q的CRT系数(e·dQ≡ 1(mod(q-1)))
  • qInv是一个CRT系数,是一个小于p的正整数 q·钦夫≡ 1(模块p)

这两种私钥表示都是“完整的”,即您只需要其中一种就可以执行RSA计算。由于您拥有第一个表示所需的一切,因此只需在
rsaparters
实例上设置这些参数(即n、p、q、e、d)就足够了,而忽略其余的参数。

Javascript密钥生成器创建一个28位整数的数组。在将它们转换为字节数组时,将它们扩展到32位并将它们表示为小尾端是正确的吗?为了安全起见,我会使用biginger#Parse(String)?