RSA 数据加密解密一般用于数据接口之间交互使用,我使用经验一般是在对 银行支付,
信息获取,话费充值等接口上使用的,初次使用这种加密方式 完全不理解 公钥,
私钥等是做什么的,通过不断的百度,测试了解了这种加密方法的使用规则。
一条数据提交到银行接口时候,需要将数据加密传输,这个时候就需要 使用私钥进行加密,
同时需要将你的公钥信息给到银行端,用于解密你的加密信息(公钥和私钥是一对的,
可以使用工具生成,在线也能搜索到在线生成的)看代码:
$privateKeyFilePath = ROOT_PATH.'/public/rsa/'.'pri.pem'; //私钥地址
$key_text = file_exists($privateKeyFilePath);
if(!$key_text){
die("私钥不存在");
}
$privateKey = file_get_contents($privateKeyFilePath);
$privateKey1 = openssl_pkey_get_private($privateKey); //获取私钥的keyid
$str = "姓名:小明,年龄:18";
$encryptData = ""; //加密后的字符串
$res = openssl_private_encrypt($str, $encryptData, $privateKey1); //进行加密
$base_str = base64_encode($encryptData); //使用base64 进行数据传输
上面的是加密方式。
下面是解密方式:
$publicKeyFilePath = ROOT_PATH.'/public/rsa/'.'pub.pem'; //公钥地址
$publicKey1 = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
$decryptData ='';
//下面是需要解密的字符串
$encryptData = "maNQ7k+kWVrXPH1o+smVjo2bwkPPyn8x4qR4l4hvNAeC9wyngY+RhmKquqF0kIXYMvPcCwCGrS52qqJJK3JHI9VBODuhZgESBMR6R842UiP1WrBsrIy2fqDJFEY8MU88yf1kJbPnyFTOAYozpdsvLEDVMC0mcGURhS3Y0Q1RPFrsaFjmg0R3l2RnHvy29GsqzvfsUxYWP+SuOz2WTlzRclGZickuz7w0tpGPf2YYpjCu8JVfZF1Bf5Pn6jmWLGUgpjt1rmendZDxqbRmBsEpewPr/uMlqpjKnLZqFKyWRGbST3mnpJJIxnZFtRmKjFYeAMZhn483aU0HCgpO1UJHFg==";
openssl_public_decrypt(base64_decode($encryptData), $decryptData, $publicKey1);
var_dump($decryptData); //解密后得到的数据信息
还有处理公钥私钥文件的程序
$priFilePath = ROOT_PATH.'/public/rsa/'.'gongyao.pub';
$pri_content = file_get_contents($priFilePath);
$str="-----BEGIN PUBLIC KEY-----\n";
for($i=0;$i<100;$i++){
$ss=substr("$pri_content",$i,64);
if($ss){
$str.=substr("$pri_content",$i*64,64)."\n";
}else{
break;
}
}
$str=trim($str);
$str.="\n-----END PUBLIC KEY-----";
file_put_contents(ROOT_PATH.'/public/rsa/'.'/gongyao.pem',$str);
或者:
$private_key=“***********”
$str = chunk_split($private_key, 64, "\n");
$private_key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
转换为程序所需要的格式