PHP JS 端使用 JSEncrypt RSA加密解密

公钥用于加密,私钥用于解密。

留意:
JS 端测试时,汉字超过 41个汉字将加密失败,普通字符,长度应该限制在 118以内。因此,对于较长内容,你需要对其切割。

1、生成私钥

# 默认存储在当前目录下

openssl genrsa -out rsa_1024_priv.pem 1024

2、生成公钥

openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem

3、HTML 示例

查看 JSEncrypt 示例

4、PHP 端解密

openssl_pkey_get_private 函数使用时,参数如果为私钥文件名,则格式必须为:file://path/to/file.pem。
或者直接为私钥内容:file_get_contents(‘./rsa_1024_priv.pem’)。

解密数据时,需要使用base64_decode函数解码,同理加密数据时,对加密后的数据,需要使用base64_encode函数编码。

// 公钥加密后内容
$pwd = 'UXuaP08GfhRlptFXgx2IS+/N/h62wZOXmGw9pfkoYW/CZzhElCm23KLqN0nMVVo1Sp9WPObQwBqABjzGwO1i6pUvpA1I53jJcnoZkQSzmkQtKgoHd/7bWdD/sNINx4Ehz26RYMdaoPB2gLGycE9fbzpD6OWaiHZHA47jUv1/3XY=';

// 读取私钥信息
$privateKey = openssl_pkey_get_private(file_get_contents('./rsa_1024_priv.pem'));

// 使用私钥解密
$realPW = '';
$ok = openssl_private_decrypt(base64_decode($pwd), $realPW, $privateKey, OPENSSL_PKCS1_PADDING);
var_dump($ok);
var_dump($realPW);

相关: