php RSA 256 加密解密,对接java 解决Openssl_pkey_get_details() expects parameter 1 to be resource bool given

对接,java 的RSA 加密时,发现我本地的竟然没办法生成证书,一顿操作下来还是不行,我把加解密代码放在linux宝塔环境,可以进行加解密,但是在我本地windows 还是有坑的,php 在进行加解密的时候,报

Openssl_pkey_get_details() expects parameter 1 to be resource bool given

原先以为是我版本太高了,用的是php8.2 的,通过一系列操作,原来是没有配置 OPENSSL_INFO

需要把 openssl.cnf 在这里插入图片描述

配置到环境变量中,之后就可以解决了

附上一个phpRSA 证书生成,加密解密过程

<?php
$keyPair = openssl_pkey_new(array(
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA
));
openssl_pkey_export($keyPair, $privateKey);
$publicKey = openssl_pkey_get_details($keyPair)['key'];
// 要签名的消息
$message = "Hello, World!";
// 对消息进行散列
$hash = hash('sha256', $message, true);
// 使用私钥进行加密,生成数字签名
openssl_sign($hash, $signature, $privateKey, OPENSSL_ALGO_SHA256);
// 将消息、数字签名和公钥一起发送给对方
$data = array(
    'message' => $message,
    'signature' => base64_encode($signature),
    'public_key' => $publicKey
);
// 对方接收到数据后进行验证
$message = $data['message'];
$signature = base64_decode($data['signature']);
$publicKey = openssl_pkey_get_public($data['public_key']);
// 使用公钥解密数字签名,并验证其有效性
$valid = openssl_verify(hash('sha256', $message, true), $signature, $publicKey, OPENSSL_ALGO_SHA256);
if ($valid === 1) {
    
    
    echo "消息的完整性和身份验证通过";
} else {
    
    
    echo "消息的完整性和身份验证失败";
}

猜你喜欢

转载自blog.csdn.net/qq_22823581/article/details/134528647
今日推荐