RSA加密解密,分段
genRsakey (1).rar function signByMap($data)
{
$sign = '';
if ($data) {
ksort($data);
foreach ($data as $key => $value) {
if (isset($value)) {
if ($key == 'service') {
$sign .= $key . '=' . $value;
} else {
$sign .= $key . '=' . $value . '&';
}
}
}
}
return $sign;
}
//加密
public function rsa_jm($result)
{
$data = json_encode($result, true);
if (empty($data)) {
return 'data参数不能为空';
}
if (is_array($data)) {
return 'data参数不能是数组形式';
}
$rsa_public = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfZWlnB4jImu0usg6ElOW6qAl/
wIFUhM2e8GXErDpcwHqxNzI6qiC/98Zp/Qiardx+DK+Xr88Uaht62RSpRzmQjzDf
3yb2UHRYVnFPxS/i4rNfpuu6RgIaFhUpQC+h8avbJrXppSuzS6D+GVHT8BWAjlGj
x5L21yzRfa00rkFviQIDAQAB
-----END PUBLIC KEY-----';
//公钥加密
// $key = openssl_get_privatekey($rsa_public);
$key = openssl_pkey_get_public($rsa_public);
if (!$key) {
return ('公钥不可用');
}
$crypted = array();
$data = $data;
$dataArray = str_split($data, 117);
foreach ($dataArray as $subData) {
$subCrypted = null;
openssl_public_encrypt($subData, $subCrypted, $key);
$crypted[] = $subCrypted;
}
$crypted = implode('', $crypted);
return base64_encode($crypted);
}
//验证 sha256WithRSA 签名
function verify($content, $sign, $publicKey)
{
$publicKey = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($publicKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
$publicKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCc52uQwT8+PnYd7swU9VaGrmc6
oEfLd8alfqR8tL8f9eRTwmJnR2vsybUi2MZXeKpFHWg5psq1QkFO+xyrIdQM6ZSM
Q7EwBKUUGMEYhrHZ+4lXq+sOXC5fGZuBoTs8DmCtYQLonGQI4LDHEQzq/RWXPg1g
1x9Ww4hBRwb5Hw7OpwIDAQAB
-----END PUBLIC KEY-----';
$key = openssl_get_publickey($publicKey);
$ok = openssl_verify($content, base64_decode($sign), $key, 'SHA256');
openssl_free_key($key);
return $ok;
}
//生成 sha256WithRSA 签名
function getSign($content, $privateKey)
{
$key = openssl_get_privatekey($privateKey);
openssl_sign($content, $signature, $key, "SHA256");
openssl_free_key($key);
$sign = base64_encode($signature);
return $sign;
}
/**
* 私钥解密(分段解密)
* @encrypstr 加密字符串
*/
public function decrypt($encryptstr) {
$encryptstr = base64_decode($encryptstr);
$decrypted = array();
$dataArray = str_split($encryptstr, 128);
foreach($dataArray as $subData){
$subDecrypted = null;
openssl_private_decrypt($subData, $subDecrypted, $this->privateKey);
$decrypted[] = $subDecrypted;
}
$decrypted = implode('',$decrypted);
$decrypted=json_decode($decrypted,true);
return $decrypted;
}