正在写一个 RSA 私钥 PEM 文件的生成,用于轻量级的转换 PKCS#1 、PKCS#8,但卡在了这个反向计算上,不会算😂
正在写 java 版代码:
/***
* 通过公钥指数和私钥指数构造一个 PEM
* @param modulus 必须提供模数
* @param exponent 必须提供公钥指数
* @param dOrNull 私钥指数可以不提供,导出的 PEM 就只包含公钥
*/
public RSA_PEM(byte[] modulus, byte[] exponent, byte[] dOrNull) {
Key_Modulus=modulus;//modulus
Key_Exponent=exponent;//publicExponent
if(dOrNull!=null) {
Key_D=dOrNull;//privateExponent
//TODO 如何计算?
Val_P=null;//prime1
Val_Q=null;//prime2
Val_DP=null;//exponent1
Val_DQ=null;//exponent2
Val_InverseQ=null;//coefficient
}
}
//这些 byte[] 通过 BigInteger 转成大数进行运算
PEM 的解析以前已经写好了,现在 java 代码直接 copy 的 c#的代码,https://github.com/xiangyuecn/RSA-csharp/blob/master/RSA_PEM.cs 以前也是不会算,所有没有加由 Modulus 、Exponent 、D 的直接构造方法,要是加上就完美了
那么,是怎么样反向计算出 P 、Q 、DP 、DQ 、InverseQ 呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.