近在整接口对接;对方用的是java,里面用到了RSA加密模式,我用php写,结果不行,发过去以后,对方表示无法解密
去官网看了下openssl_private_encrypt的OPENSSL_NO_PADDING形式;
For a 1024 bit key length => encrypted number of raw bytes is always a block of 128 bytes (1024 bits) by RSA design.
For a 2048 bit key length => encrypted number of raw bytes is always a block of 256 bytes (2048 bits) by RSA design.
然后就手动填充了ASCII 0;补全256字节就解决了
$Str = str_pad($Str, 256, “\0”, STR_PAD_LEFT);
public function rsaEncrypt($privateKey, $Str)
{
//将字符串分块
//加上标准头尾标签
$res = "-----BEGIN RSA PRIVATE KEY-----" . PHP_EOL .
wordwrap($privateKey, 64, PHP_EOL, true)
. PHP_EOL . "-----END RSA PRIVATE KEY-----";
$Res = openssl_pkey_get_private($res);
if ($Res) {
$Str = str_pad($Str, 256, "\0", STR_PAD_LEFT);
if (openssl_private_encrypt($Str, $EncryptRes, $Res, OPENSSL_NO_PADDING)) {
return base64_encode($EncryptRes);
}
}
return '';
}