【发布时间】:2017-08-31 19:48:40
【问题描述】:
我得到了一个 256 字节的模数 ('n')、一个 256 字节的私有指数 ('d') 和一个 3 字节的 {1,0,1} 公共指数 ('e')。我正在尝试对 32 个字节的数据进行签名。
我已经尝试创建一个新的 RSAParameters。
byte[] n = new byte[256]; //populated in my code
byte[] d = new byte[256]; //populated in my code
byte[] e = new byte[]{1,0,1};
byte[] junkData = new byte[32]; //populated in my code
RSAParameters rsaParam = new RSAParameters();
rsaParam.Modulus = n;
rsaParam.Exponent = e;
rsaParam.D = d;
然后我创建一个 RSACrytoServiceProvider,将参数导入其中,并尝试对数据进行签名。
var csp = new RSACryptoServiceProvider(2048);
csp.ImportParameters(rsaParam);
csp.SignData(junkData, new SHA1CryptoServiceProvider());
问题在于 RSACryptoServiceProvider 似乎只是公开的,当我尝试签名时收到“密钥集不存在”加密异常。
我是否还需要 P 和 Q 元素来正确签署数据,还是我在做一些明显错误的事情?感谢您的帮助!
【问题讨论】:
-
我怀疑 csp 希望 P & Q 和 np 和 nq 用中国剩余定理简化签名和解密操作......节省了几个周期,但需要更多的 N、d 和 e
-
...aaand 当然我忘了提到 q_inv ...
标签: c# cryptography rsa