PHP openssl加密解密错误?无效的公钥/私钥?
我用php编写了以下测试代码:PHP openssl加密解密错误?无效的公钥/私钥?,php,encryption,openssl,Php,Encryption,Openssl,我用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_g
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
我不确定什么是“有效的……钥匙”。有没有其他的方式可以让我拿到钥匙?根据手册和我读到的内容,这似乎是准确的。你很接近。首先,不要用密码短语加密私钥。第二,直接从资源获取公钥。即:
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);
}
请注意:您的代码与PGP无关。谢谢您的澄清。它也不是真正的“安全套接字层”。我一直将公钥/私钥加密称为PGP。这本质上是PGP(特别是在它的实现方式上),我认为,它只是以不同的方式进行管理,不使用相同的验证/信任系统(per)。我希望有一个更简单的术语来描述公钥/私钥加密。作为这个问题的扩展,如果允许的话,我如何将
$prK
存储在会话变量中,例如$\u session['prK']
。简单赋值$\u SESSION['prK']=$keys[0]
存储数字0,并且在将其分配为引用时会发生相同的情况,例如$\u SESSION['prK']=&$keys[0]
。您应该问一个新问题。我不使用PHP——我更喜欢Ruby,所以我不熟悉PHP中的会话变量。干杯