janfish / security
使用RSA进行加密、解密、签名和验证
dev-master
2022-09-27 05:13 UTC
Requires
- php: >=7.0
- ext-openssl: *
This package is not auto-updated.
Last update: 2024-09-24 14:46:16 UTC
README
RSA
生成RSA密钥
可用的密钥长度为1024和2048位
$ openssl genrsa -out rsa_private_key.pem 1024
$ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
加密与签名
- 准备密钥
$pri = file_get_contents('keys/rsa_private_key.pem'); $pub = file_get_contents('keys/rsa_public_key.pem');
- 加密
$rsa = new RSA();
$rsa->setPubKey($pub);
$encodedData = $rsa->encrypt("hello", RSA::OPENSSL_PKCS1_PADDING);
- 解密
$rsa = new RSA();
$rsa->setPriKey($pri);
$sourceData = $rsa->decrypt($encodedData, RSA::OPENSSL_PKCS1_PADDING);
- 签名
$rsa = new RSA();
$rsa->setPriKey($pri);
$signedData = $rsa->sign('hello',Rsa::OPENSSL_ALGO_SHA256);
- 验证
$rsa = new RSA();
$rsa->setPubKey($pri);
$result = $rsa->verify('hello',$signedData,Rsa::OPENSSL_ALGO_SHA256);
支持参数
- 签名算法类型
- 加密填充类型
提示
- 当使用OpenSSL时,若使用"OPENSSL_NO_PADDING"作为填充参数,您需要手动填写原始数据
$str = str_pad("hello", 256); //128 or 256
$rsa = new RSA();
$rsa->setPubKey($pub);
$encodedData = $rsa->encrypt($str, RSA::OPENSSL_NO_PADDING);
其他加密
$encryption= new Crypt(['cipher' => 'aes-256-cbc']);
$encode = $encryption->encrypt("hello", 'keyToMyHeart');
$decode = $encryption->decrypt($encode, 'keyToMyHeart');
var_dump([
$encryption->getIv(),
$encode,
$decode
]);
$en = new Crypt(['cipher' => 'aes-256-cbc']); //des-ede3;
$iv = '0123456789abcdef';
//$iv = $en->makeIv();
$clientSecret = 'nuasndu89382j3d3d9238';
$encode = $en->encrypt("hello", $clientSecret, $iv);
$decode = $en->decrypt($encode, $clientSecret, $iv);
var_dump([
$en->getIv(),
$en->ivSize,
$encode,
$decode
]);