有没有办法使用我在OpenSSL中使用Crypto++ API生成的RSA key ?我正在寻找一种以Crypto++和OpenSSL都可以轻松打开它们的格式存储 key 的方法。

我正在编写一个许可方案,希望使用Crypto++ API验证签名并解密文件,但是要生成许可文件,我想使用Web界面(可能使用仅支持OpenSSL的PHP​​)来生成和加密/签署许可证。

我会使用Crypto++编写两个应用程序并从PHP调用它,但是由于私钥将以加密形式存储,因此必须将密码传递给应用程序,并且在命令行上传递它似乎不是一个好习惯。我的主意。

最佳答案

Crypto++和OpenSSL都可以处理PKCS#8编码的 key 。在crypto++中,您可以像这样生成 key 并转换为PKCS#8缓冲区,

AutoSeededRandomPool rng;
RSAES_OAEP_SHA_Decryptor priv(rng, 2048);
string der;
StringSink der_sink(der);
priv.DEREncode(der_sink);
der_sink.MessageEnd();

// der.data() is the bytes you need

现在,您只需要将字节传递给PHP。您可以将其保存在文件中,发送消息。

唯一的麻烦是,PHP的OpenSSL接口(interface)仅接受PEM编码的PKCS#8。您可以在PHP中轻松地将DER编码的缓冲区转换为PEM,
<?php
function pkcs8_to_pem($der) {

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
    static $END_MARKER = "-----END PRIVATE KEY-----";

    $value = base64_encode($der);

    $pem = $BEGIN_MARKER . "\n";
    $pem .= chunk_split($value, 64, "\n");
    $pem .= $END_MARKER . "\n";

    return $pem;
}
?>

如果愿意,还可以将PKCS#8转换为C++中的PEM。从PHP代码中可以看到,该算法非常简单。

如今,OpenSSL如此流行。我看不出有任何理由将Crypto++用于此类常见的加密应用程序。

关于c++ - 在OpenSSL上使用Crypto++生成的RSA key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1357569/

10-12 15:01