0

我想验证具有特定公钥的证书是否在android密钥库中退出。我有一个字符串中的密钥。如何验证相应的证书是否存在于密钥库中。 当检查apis我发现certificate.verify(mykey);是唯一的选择。但mykey sholud是PublicKey类型的,我在字符串如何验证bks存储区中证书的字符串/字节[]格式的公钥

字符串是0r1wxn7wIXJuS/hDnDvectD2VTmel9akk8awIWAXIRo = .....这是公钥的哈希值..我必须返回与此密钥对应的证书。 任何人都可以帮助我吗?

任何人都可以帮我吗?

问候 科兹洛夫

+0

只是为了验证:你确定你需要做的,实际上不验证服务器使用密钥库普通的方式?我只是想不出一个你需要做这种比较的用例。 – 2011-12-27 17:30:20

+0

它看起来像一个字符串是什么?你可以编辑你的问题,并添加实际的字符串? – 2011-12-27 21:20:04

回答

0
KeyStore store = ... ; 
byte[] target = ... ; // Base-64 decode your string. 
MessageDigest digest = MessageDigest.getInstance(algorithm); 
Enumeration<String> aliases = store.aliases(); 
while(aliases.hasMoreElements()) { 
    String alias = aliases.nextElement(); 
    Certificate c = store.getCertificate(alias); 
    if (c == null) 
    continue; 
    PublicKey pub = c.getPublicKey(); 
    byte[] hash = digest.digest(pub.getEncoded()); 
    if (MessageDigest.isEqual(hash, target)) { 
    // Certificate "c" is a match. 
    } 
} 
+0

嗨,thanx很多erickson。 – Kozlov 2011-12-28 11:23:47