PHP openssl加密解密错误?无效的公钥/私钥


PHP openssl encrypt decrypt errors? Not valid public/private keys?

我在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

我不确定什么是"有效的……"关键。"还有别的办法能让我拿到钥匙吗?根据手册和我所阅读的内容,这似乎是准确的。

你很接近了。首先,不要用密码短语加密您的私钥。其次,直接从资源中获取公钥。例如:

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);
}