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

时间:2014-06-21 16:23:58

标签: 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_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

我不确定是什么构成了"有效...密钥。"我应该采用不同的方式获取密钥吗?根据手册和我读过的内容,这似乎是准确的。

1 个答案:

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