如何在C ++中测试公钥/私钥对?

时间:2012-07-25 14:07:30

标签: c++ c openssl ssl-certificate x509certificate

有没有办法验证给定的私钥是否与给定的公钥匹配?我想用C ++检查它们

2 个答案:

答案 0 :(得分:2)

这取决于使用密钥的公钥算法,以及这些密钥的编码方式。例如,RSA公钥由两个参数'n'和'e'组成,而私钥由加'd'和可能'p'和'q'组成。所有这些参数都是大整数,通常使用一些大整数库的内部形式表示。因此,要比较公钥和私钥,您只需要检查'n'和'e'是否匹配。根据所使用的库和系统,您甚至可以忽略“e”,因为它可能是常量。

使用可能类似的OpenSSL:

RSA *pubkey = PEM_read_RSA_PUBKEY(...);
RSA *privkey = PEM_read_RSAPrivateKey(...);

if (!BN_cmp(pubkey->n, privkey->n)) {
    // same modulus, so the keys match

答案 1 :(得分:0)

查看http://www.cryptopp.com/,它具有检查密钥对的实用程序。

作为一般规则,私钥应该能够解密使用公钥加密的数据。这证明了给定的密钥对是有效的。