PHP 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_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/

相关文章:

php - 如何使用javascript禁用 "save page as"?

java - 在加密/解密中排除一组字符

python 扭曲 : How to stop TLS?

http - 服务器不响应手动请求

php - 无法删除数据库。删除数据库查询不起作用

javascript - 跟踪用户输入并提供单词完成- Angular

.net-core - 如何将正确的 libssl 版本包含到 yocto-build 中以运行 .net-core 应用程序?

c++ - 什么是 undefined symbol : X509_EXTENSION_free?

java - 有完整的eclipse包吗?

ios - AES 解密在 iOS 7 中的行为与 iOS 8/9 不同