PHP7.1 加密函数mcrypt_module_open()替换方案 和rsa pem参数细解

7.1的发布文档上面 写了以后不建义使用类似mcrypt的扩展 可以使用openssl拓展进行加密解密操作

用 OpenSSL, Linux 上自带,常用命令如下:

– 生成 RSA 私钥(传统格式的)

openssl genrsa -out rsa_private_key.pem 1024

– 将传统格式的私钥转换成 PKCS#8 格式的(JAVA需要使用的私钥需要经过PKCS#8编码,PHP程序不需要,可以直接略过)

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

– 生成 RSA 公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

以下示例代码

AES:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
header('Content-Type: text/plain;charset=utf-8');
$data = 'phpbest';
$key = 'oScGU3fj8m/tDCyvsbEhwI91M1FcwvQqWuFpPoDHlFk='; //echo base64_encode(openssl_random_pseudo_bytes(32));
$iv = 'w2wJCnctEG09danPPI7SxQ=='; //echo base64_encode(openssl_random_pseudo_bytes(16));
echo '内容: '.$data."\n";

$encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '加密: '.base64_encode($encrypted)."\n";

$encrypted = base64_decode('To3QFfvGJNm84KbKG1PLzA==');
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '解密: '.$decrypted."\n";
?>

RSA:
用openssl生成rsa密钥对(私钥/公钥):
openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -pubout -in rsa_private_key.pem -out rsa_public_key.pem

1
2
3
4
5
6
7
8
9
10
11
12
<?php
header('Content-Type: text/plain;charset=utf-8');
$data = 'phpbest';
echo '原始内容: '.$data."\n";

openssl_public_encrypt($data, $encrypted, file_get_contents(dirname(__FILE__).'/rsa_public_key.pem'));
echo '公钥加密: '.base64_encode($encrypted)."\n";

$encrypted = base64_decode('nMD7Yrx37U5AZRpXukingESUNYiSUHWThekrmRA0oD0=');
openssl_private_decrypt($encrypted, $decrypted, file_get_contents(dirname(__FILE__).'/rsa_private_key.pem'));
echo '私钥解密: '.$decrypted."\n";
?>

秘钥可以用 openssl rsa -inform PEM -modulus -noout < private_key.pem 得出详细数据

rsa总共用到的数据
p
q
n(module)
φ(n)
e
d

说明

PEM RSAParameter
Modulus modulus
Exponent Exponent
prime1 P
exponent1 Q
prime2 DP
exponent2 DQ
coefficient InverseQ
privateExponent D

页面上行js rsa加密可以用 http://www.ohdave.com/rsa/index.php 这个

n为 openssl rsa -pubin -inform PEM -modulus -noout < public_key.pem
e为 openssl rsa -pubin -inform PEM -text -noout < public_key.pem