基于http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/security/RSAPrivateCrtKey.html,我可以得到:
通过呼叫每个吸气剂。但是,我如何获得私人指数" d"?我应该计算私人指数" d"通过手动,或有任何简单的方法来获得私人指数" d"来自RSAPrivateCrtKey? 这只是为了运动,所以它不会造成任何伤害。
编辑: 我真的需要私人指数" d"从XML制作PEM文件。仅供参考,这只是一个练习,我只想证明Java Card中RSAPrivateCrtKey的真实性与现实世界中的RSAPrivateCrtKey相同(如OpenSSL等)。有没有其他方法来证明它?或者,是否有其他方法可以在没有私人指数的情况下从RSAPrivateCrtKey制作PEM文件" d"?
答案 0 :(得分:1)
这个应该有用(来自Bouncy Castle' s 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);
}
祝你好运!
答案 1 :(得分:0)
您将不需要私有指数,因为您使用带有 TYPE_RSA_CRT_PRIVATE 选项的javacard.security.KeyBuilder构建密钥对。然后,调用 buildKey 方法将返回 RSAPrivateCrtKey 的实例,该实例具有足够的公共方法来执行任何计算。
如果您想了解算法本身的一些细节(以及如何找到d,p,q等),您可以在网上找到大量文章,例如: http://www.techscience.com/doi/10.3970/icces.2008.005.255.pdf