PHPRSA加解密⼯具,超长加密问题处理(⼆)
解决超长加密问题思路:分割分段加密
<?php
/**
* RSA加解密超长处理
*/
namespace leyangjun\Lib;
class CryptRsa
{
use InstanceTrait;
const RSA_ENCRYPT_BLOCK_SIZE = 117;
const RSA_DECRYPT_BLOCK_SIZE = 128;
/**
* 转成标格式(有时你会发现别⼈给你的秘钥不是标准格式,可以⽤此⽅法将其转成标注格式)
* @Add 乐杨俊 leyangjun
* @param $key
* @return string
*/
public function setSPhptandardFormat($key)
{
$pem = chunk_split($key, 64, "\n");
$pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
/
/$publicKey = openssl_pkey_get_public($pem);
return $pem;
}
/**
* 超长加密(由于秘钥有长度限制⽐如1024,2048约长表⽰接受的加密数据越多,否则会有超长加密不成功的问题)
* 117表⽰长度,加密的时候可以从这开始分割加密(解密的时候从128开始解密即可)
* @Add 乐杨俊 leyangjun
* @param String $content 待加密内容
* @param String $path_rsa_public_key RSA公钥路径(绝对)
*/
public function superLongPublicKeyEncrypt($content, $rsaPublicKey, $choicePath = true, $withBase64 = false)
{
if ($choicePath) {
$pubKeyId = openssl_pkey_get_public($rsaPublicKey);//绝对路径读取
} else {
$pubKeyId = $rsaPublicKey;//公钥
目前行的php开发工具有}
$result = '';
$data = str_split($content, self::RSA_ENCRYPT_BLOCK_SIZE);
foreach ($data as $block) {
openssl_public_encrypt($block, $dataEncrypt, $pubKeyId, OPENSSL_PKCS1_PADDING);
$result .= $dataEncrypt;
}
if ($withBase64) {
return base64_encode($result);
} else {
return $result;
}
}
/**
* 超长私钥解密(128开始截取解密)
* @param $content 待解密串
* @param $content 待解密串
* @param $rsaPrivateKey 私钥|绝对路径
* @param bool|true $choicePath
* @param bool|false $withBase64
* @return bool|string
*/
public static function superLongPrivateKeyEncrypt($content, $rsaPrivateKey, $choicePath = true, $withBase64 = false) {
if ($choicePath) {
$priKeyId = openssl_pkey_get_private($rsaPrivateKey);//绝对路径
} else {
$priKeyId = $rsaPrivateKey;//私钥
}
if ($withBase64) {
$data = base64_decode($content);
}
$result = '';
$data = str_split($data, self::RSA_DECRYPT_BLOCK_SIZE);
foreach ($data as $block) {
openssl_private_decrypt($block, $dataDecrypt, $priKeyId, OPENSSL_PKCS1_PADDING);
$result .= $dataDecrypt;
}
if ($result) {
return $result;
} else {
return false;
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论