我在 php 中有这个测试代码:
function genPGP() {
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $prK, bin2hex(mcrypt_create_iv(100, MCRYPT_DEV_URANDOM)));
// Get public key
$puK = openssl_pkey_get_public($prK);
return array($prK,$puK);
}
function prKeyDecrypt($data,$key){
if (openssl_private_decrypt($data, $r, $key)) {
return $r;
}
}
$keys = genPGP();
$prK = $keys[0];
$puK = $keys[1];
$data = 'abc123';
openssl_public_encrypt($data,$encrypted,$puK);
echo prKeyDecrypt($encrypted,$prK);
我收到两个错误,它们都很相似,它们是:
Warning: openssl_public_encrypt(): key parameter is not a valid public key in test2.php on line 23
Warning: openssl_private_decrypt(): key parameter is not a valid private key in test2.php on line 14
我不确定什么是“有效...... key ”。我应该通过其他方式获取 key 吗?根据手册和我读过的内容,这似乎是准确的。
最佳答案
你们很接近。首先,不要使用密码加密您的私钥。其次,直接从资源中获取公钥。即:
function genPGP0() {
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $prK);
// Get public key
$puK = openssl_pkey_get_details($res)["key"];
return array($prK,$puK);
}
如果您想使用密码(您将存储私钥),您可以使用如下内容:
function genPGP() {
// Create the keypair
$res=openssl_pkey_new();
// Get private key
$pass = bin2hex(mcrypt_create_iv(100, MCRYPT_DEV_URANDOM));
openssl_pkey_export($res, $prK_encrypted, $pass);
$prK = openssl_pkey_get_private($prK_encrypted, $pass);
// Get public key
$puK = openssl_pkey_get_details($res)["key"];
return array($prK,$puK);
}
关于PHP openssl 加密解密错误?没有有效的公钥/私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343545/