我一直在尝试制作两个PHP页面,一个用于加密,另一个用于解密。
加密页面的代码:
<form action="encrypt.php" method="post">
<input type="text" name="data">
<input type="submit">
</form>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$keys = openssl_pkey_new($config);
openssl_pkey_export($keys, $privKey);
$pubKey = openssl_pkey_get_details($keys);
$pubKey = $pubKey["key"];
require "openssl.php";
openssl_public_encrypt($_POST["data"],$encrypted, $pubKey);
echo $encrypted;
echo "<br><br>";
echo $privKey;
}
?>
这是解密的代码:
<form action="decrypt.php" method="post">
Encrypted Text: <textarea name="encrypted" rows="10" cols="100"></textarea><br><br>
Key: <textarea name="key" rows="10" cols="100"></textarea><br>
<input type="submit">
</form>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
{
openssl_private_decrypt($_POST["encrypted"],$decrypted,$_POST["key"]);
echo $decrypted;
}
?>
似乎加密数据就好了,但是当我尝试使用其他页面解密时,出现错误:
openssl_private_decrypt()[function.openssl-private-decrypt]:key参数不是有效的私钥
我直接从加密文件的输出中复制并粘贴了私钥。为什么我收到错误?
答案 0 :(得分:0)
似乎可以加密数据了,
要调试的第一件事:您可以立即解密加密页面上的加密消息并获得相同的纯文本消息吗?
openssl_private_decrypt()[function.openssl-private-decrypt]:密钥参数不是有效的私钥
您的代码包含:
openssl_private_decrypt($_POST["encrypted"],$decrypted,$_POST["key"]);
尝试以下方法:
$private = openssl_pkey_get_private($_POST['key']);
openssl_private_decrypt($_POST["encrypted"], $decrypted, $private);
安全性:OpenSSL的RSA加密默认设置are not secure。
为了获得最佳结果,在需要公开密钥加密的任何现实应用中,请考虑切换到libsodium并仅使用the crypto_box_seal
API。