1

我们目前正在用java实现一个数字签名小程序。用户将拥有包含私钥密钥库及其各自证书的令牌。证书和私钥将具有不同的别名。

我需要做的是将存储中的私钥调用/匹配到用户在签名时选择的证书。java - 如何在java中将私钥与其各自的证书匹配?我需要 getkey(alias, password) 之类的东西,其中别名来自所选证书和密钥之间的匹配。

4

2 回答 2

0

如果您使用的是 ECC,那么

Q = k * P

其中Q是您的公钥,因此当您知道私钥k时,您也知道基点P和曲线,因此您可以“轻松”计算公钥。

当使用众所周知的实现时,RSA 的问题也很简单,其中指数 e 是固定的。如果它没有修复它可能会很棘手,但也不是那么难。

完全另一个问题是......您如何将给定的公钥与存储的证书相匹配?另一个问题是为什么要做这样的事情?您应该在签名后保存证书信息并访问 java 密钥库中的对应证书。歧义总是一个问题,特别是在加密货币中,你应该尽可能明确。

于 2012-12-17T20:51:11.520 回答
0

如果我理解你的设计 - 你的想法不是你应该继续的东西,但是 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中阅读有关它的更多信息- 但我真的认为你这样做是错误的。

另外 - 一个相关的 API(我假设你正在使用它) - http://docs.oracle.com/javase/6/docs/api/java/security/Signature.html

于 2012-12-17T20:59:45.867 回答