【问题标题】:Why would RSA_size crash?为什么 RSA_size 会崩溃?
【发布时间】:2015-05-14 06:33:48
【问题描述】:

我正在尝试使用 OpenSSL 加密库,但它在调用时崩溃了,这是我见过的每个示例中的主要内容。以下是它的设置方式:

BIO* bp = BIO_new_mem_buf(_publicKey, -1); // Create a new memory buffer BIO.
RSA* pubKey = PEM_read_bio_RSA_PUBKEY(bp, 0, 0, 0); // And read the RSA key from it.

unsigned char encryptedRandKey[RSA_size(pubKey)];
BIO_free(bp);

_publicKey 是一个以空字符结尾的字符串,其中包含一个 PEM 格式的 RSA 密钥(带有 -----BEGIN XXX----- 等等)。它在RSA_size 中因访问不正确而崩溃。

删除BIO_free 没关系。

有什么想法吗?谢谢!

【问题讨论】:

    标签: c openssl cryptography


    【解决方案1】:

    您需要检查PEM_read_bio_RSA_PUBKEY() 的返回值以确保它不为空。 _publicKey 的内容很可能不是格式正确的密钥,因此 pubKey 为 NULL。

    【讨论】:

    • 呃。感谢您指向明显的指针!现在的问题是问题出在哪里,因为 _publicKey 是合法的。我唯一能看到的是,换行符可能以某种方式被删除了。整个事情以 XML 形式从数据库返回,该元素到控制台的 XML 转储显示 -----BEGIN 等换行符。但是 _publicKey 的 printf 似乎没有换行符。
    • @Oscar - 是的,OpenSSL 需要 PEM 编码中的新行。请参阅Can't set public/private key in OpenSSL 以及围绕答案的讨论。 (很抱歉挖了一个旧线程)。
    • 这没什么坏处。谢谢 JWW。
    【解决方案2】:

    尝试PEM_read_bio_RSAPublicKey 而不是PEM_read_bio_RSA_PUBKEY

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 2013-01-31
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2011-04-17
      相关资源
      最近更新 更多