簡體   English   中英

檢查給定的密鑰對是否有效 C++

[英]Check if given keypair is valid C++

我想檢查給定的密鑰對是否有效,我找到了解決方案,但它不起作用,因為RSA類的對象沒有參數n.

#include <openssl/rsa.h>
#include <openssl/pem.h>

int main() {

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

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

    return 0;
}

如何解決我的問題,或者是否有另一種方法來測試密鑰對是否有效?

OpenSSL 3.x

OpenSSL 3.x 提供EVP_PKEY_get_bn_param 它可以像這樣使用(當然必須相應地添加讀取密鑰等的錯誤處理):

#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/evp.h>
#include <openssl/core_names.h>
...
    EVP_PKEY *priv_key= NULL, *pub_key= NULL;
    BIGNUM *rsa_pub_n = NULL, *rsa_priv_n = NULL;
...
    PEM_read_PUBKEY(fp_pub, &pub_key, NULL, NULL)
    PEM_read_PrivateKey(fp_priv, &priv_key, NULL, NULL)
...
    //extract n with EVP_PKEY_get_bn_param for the keys...
    if (EVP_PKEY_is_a(priv_key, "RSA")) {
        if (!EVP_PKEY_get_bn_param(priv_key, OSSL_PKEY_PARAM_RSA_N, &rsa_priv_n)) {
            //error message and exit
    }
    //finally compare with BN_cmp

請參閱此處的文檔: https ://www.openssl.org/docs/man3.0/man3/EVP_PKEY_get_bn_param.html

OpenSSL 1.x

對於 OpenSSL 1.x,可以使用函數RSA_get0_key 請注意,此函數在 OpenSSL 3.x 中被標記為已棄用。

#include <openssl/rsa.h>
#include <openssl/pem.h>
...
    BIGNUM *rsa_pub_n = NULL, *rsa_priv_n = NULL;
...
    RSA *pub = RSA_new();
    PEM_read_RSA_PUBKEY(fp_pub, &pub, NULL, NULL)
    RSA *priv = RSA_new();
    PEM_read_RSAPrivateKey(fp_priv, &priv, NULL, NULL)
...
    RSA_get0_key(pub, &rsa_pub_n, NULL, NULL);
    RSA_get0_key(priv, &rsa_priv_n, NULL, NULL);
    ...
    //finally compare with BN_cmp

確保檢查每個函數的返回碼並添加正確的錯誤處理。

更多信息在這里: https ://www.openssl.org/docs/manmaster/man3/RSA_get0_key.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM