![](/img/trans.png)
[英]Private key algorithm does not match algorithm of public key in end entity certificate (at index 0)
[英]Certificate match to private key
我們目前正在用Java實現數字簽名小程序。 用戶將擁有包含私鑰及其各自的證書的密鑰庫的令牌。 證書和私鑰將具有不同的別名。
我需要做的是將商店中的私鑰調用/匹配到用戶在簽名時選擇的證書。 如何在Java中將私鑰與其各自的證書進行匹配? 我需要類似getkey(alias,password)這樣的東西,其中別名是從所選證書和密鑰之間的匹配中得出的。
如果您使用的是ECC,
Q = k * P
其中Q是您的公鑰,因此,當您知道私鑰k時,您還知道基點P和曲線,因此您可以“輕松地”計算公鑰。
當使用眾所周知的實現方式(指數e是固定的)時,RSA的問題也很簡單。 如果不固定,可能會很棘手,但也不會那么難。
另一個完全問題是...如何將給定的pubkey與存儲的證書匹配? 另一個問題是為什么會這樣? 您應該在簽名后保存證書信息,並在Java密鑰存儲區訪問對應於內核的證書。 模糊性始終是一個問題,特別是在加密中,您應盡可能明確。
如果我了解您的設計-您的想法不是您應該繼續做的,但是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.