编辑:我发现钥匙不是我在评论中所说的问题。我可以毫无问题地使用它们来加密和解密 OpenSSL 上的数据。
但我需要解密之前通过 Crypto++ 加密的 OpenSSL 上的字符串,但它不起作用。
我稍后会发布更多详细信息。
嗨,我已经使用 Crypto++ 生成的 RSA 公钥加密了一个字符串,现在我正在尝试(仍然不成功)通过 PHP 和 OpenSSL 对其进行解密。
这就是我正在做的事情:
- 非 base64 或十六进制编码的私钥存储在名为“rsa-private.key”的文件中
- 加密消息存储在“message.txt”中(十六进制编码)
第 1 步:通过以下方式加载私钥:$key = file_get_contents("rsa-private.key");
第 2 步:使用以下函数将密钥转换为 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;
}
$PEMprivatekey = pkcs8_to_pem($key);
?>
(stackoverflow.com/questions/1357569/)
第 3 步:准备密钥以供 OpenSSL 进一步使用:(没有任何问题)
<?php
$privateKey = openssl_get_privatekey($PEMprivatekey);
if (!$privateKey) {
echo "Cannot get public key";
}
?>
第 4 步:获取消息并使用以下函数解码消息:
<?php
function hex_to_str($hex){
for ($i=0; $i < strlen($hex)-1; $i+=2) {
$string .= chr(hexdec($hex[$i].$hex[$i+1])); }
return $string;
}
$message = file_get_contents("message.txt");`
$encryptedstring = hex_to_str($message);
?>
第 5 步:解密字符串:(不起作用)
<?php
openssl_private_decrypt($encryptedstring, $decrypteddata, $privateKey);
if (!$decrypteddata) {
echo "........"; } else { echo $decrypteddata; }
?>
$decrypteddata 始终为空。
我不知道为什么它不起作用。有人注意到我做错了什么吗?