我在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
我不确定是什么构成了"有效...密钥。"我应该采用不同的方式获取密钥吗?根据手册和我读过的内容,这似乎是准确的。
答案 0 :(得分:2)
你非常接近。首先,不要使用密码加密您的私钥。其次,直接从资源获取公钥。即:
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);
}