我们目前正在用java实现一个数字签名applet。用户将拥有包含私钥的密钥库及其相应证书的令牌。证书和私钥将具有不同的别名。
我需要做的是调用/匹配存储中的私钥和用户在签名时选择的证书。如何在java中将私钥与其相应的证书匹配?我需要类似getkey(别名,密码)的东西,其中别名是从所选证书和密钥之间的匹配中派生的。
发布于 2012-12-18 04:51:12
如果您正在使用ECC,那么
Q = k * P其中Q是您的公钥,因此当您知道私钥k时,您也知道基点P和曲线,因此您可以“轻松”计算公钥。
当使用众所周知的实现时,RSA的问题也很简单,其中指数e是固定的。如果它不被修复,它可能会很棘手,但也不会那么难。
完全不同的问题是...如何将给定的pubkey与存储的证书进行匹配?另一个问题是为什么要做这样的事情?您应该在签名后保存证书信息,并在java密钥库中访问相应的证书。歧义总是一个问题,特别是在加密中,你应该尽可能地明确。
发布于 2012-12-18 04:59:46
如果我理解你的设计-你的想法不应该继续,但是java应该支持你需要的东西:
使用以下代码:
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
ks.getEntry("privateKeyAlias", password);
Certificate certificateFromPrivateKey = pkEntry.getCertificate();
KeyStore.TrustedCertificateEntry certEntry = (KeyStore.TrustedCertificateEntry)ks.getEntry("certificateAlias, password);
Certificate certificateFromPublicKey = certEntry.getCertificate();
if (certificateFromPrivateKey.equals(certificateFromPublicKey)) ...在javadoc上阅读更多关于它的信息--但我真的认为你的做法是错误的。
还有-一个相关的应用程序接口(我假设您正在使用它)- http://docs.oracle.com/javase/6/docs/api/java/security/Signature.html
https://stackoverflow.com/questions/13921459
复制相似问题