在最近的项目当中,是把原来的功能封装一层弄成接口给第三方调用,其中就接触到了弄签名加密这一块,用的是RES加密,思路是用公钥和POST参数拼接成字符串再进行公钥加密,但是因RES加密对密文是有要求的,有长度限制的。POST数据过长会导致密文数据过长,从而解密失败,因此我们解决这个问题的思路是对密文进行MD5加密,然后把加密后的数据进行RES加密,但是RES加密过的数据也有可能因为编码问题导致乱码,因此我们还需要进行base64加密来避免乱码。
简单的代码展示如下:
/*
*$rsa_pub为RES公钥
*
*/
$secret = md5($querystr . $api_secret); //组成密文
openssl_public_encrypt($secret ,$test, $rsa_pub); //公钥加密
$bs_test = base64_encode($test); //进行base64加密