基于http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/security/RSAPrivateCrtKey.html我可以得到:
P,素数p
Q,素数q
PQ = q-1 mod p
DP1 = d mod(p-1)
DQ1 = d mod(q-1)
通过调用每个getter。但是,如何获得私有指数“ d”?我应该手动计算私有指数“ d”,还是有任何简单的方法从RSAPrivateCrtKey获取私有指数“ d”?
无论如何,这只是为了锻炼,因此不会造成任何伤害。
编辑:
我真的需要专用指数“ d”来从XML制作PEM文件。仅供参考,这只是一个练习,我只想证明Java Card中RSAPrivateCrtKey的真实性与现实世界中的RSAPrivateCrtKey相同(例如在OpenSSL中)。还有其他方法可以证明吗?或者,是否有其他方法可以通过RSAPrivateCrtKey生成PEM文件而不使用私有指数“ d”?
最佳答案
这应该可以工作(源自Bouncy Castle的RSAKeyPairGenerator.java并使用一个RSA私钥进行验证):
public static BigInteger getPrivateExponent(byte[] publicExponentBytes, byte[] pBytes, byte[] qBytes) {
BigInteger e = new BigInteger(1, publicExponentBytes);
BigInteger p = new BigInteger(1, pBytes);
BigInteger q = new BigInteger(1, qBytes);
BigInteger pSub1 = p.subtract(BigInteger.ONE);
BigInteger qSub1 = q.subtract(BigInteger.ONE);
BigInteger phi = pSub1.multiply(qSub1);
return e.modInverse(phi);
}
祝好运!
关于java - Java卡RSAPrivateCrtKey私有(private)指数“d”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34142666/