openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解

其实有时候觉得写博客好烦,就个函数就开篇博客。很小的意见事情而已,知道的人看来多取一举,或者说没什么必要,浪费时间,不知道的人就会很郁闷。技术就是这样的,懂的人觉得真的很简单啊,不知道的人真的好难。。。
2018-11-26 12:10更新
**一般在跟第三方接口对接数据的时候,为了保证很多都使用的RSA签名,没性趣了解的同学只需要知道原理的同学,主需要知道“RSA非对称加/解密算法中最流行最牛逼的然后知道怎么使用它就足够了” **
重点内容
如果下面的链接没有被翔的话可以直接飞机过去,关于RSA加密算法的原理有兴趣的同学可以搜索“阮一峰”的博客

RSA加密算法原理一
RSA加密算法原理二

private static function sign($data){
        $pk = self::$private_key;
        openssl_sign($data, $sign, $pk);
        $sign = base64_encode($sign);
        return $sign;
    }

咋一看KaTeX parse error: Expected 'EOF', got '#' at position 42: …函数有点不一样,捂脸.... #̲语法是这样的: **opens…data, s i g n , sign, sign,pk); 传入了 d a t a 数 据 o p e n s s l s i g n ( ) 对 data数据 openssl_sign()对 dataopensslsign()data进行签名,用的是静态变量 p r i v a t e k e y , 签 名 完 成 后 返 回 了 private_key,签名完成后返回了 privatekeysign 作为签名结果,然后再base64_encode() 进行二进制编码,然后返回编码过后的签名**

";  
echo $pu_key;echo "
"; $data = "

你忙吧,我吃柠檬!

";//原始数据 $encrypted = ""; $decrypted = ""; echo "---------------------------------------","私钥加密,用公钥解密:","---------------------------------------"; echo "source data:",$data,"\n"; echo "
"; echo "加密内容:"; openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 echo $encrypted,"\n"; echo "
"; echo "解密开始:"; openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 echo $decrypted,"\n"; echo "---------------------------------------","公钥加密,用私钥解密:","---------------------------------------"."
"; openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密 $encrypted = base64_encode($encrypted); echo '加密内容:',$encrypted; echo "
"; echo "解密内容:"; openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密 echo $decrypted,"\n"; #---------------------------------------封装成函数------------------------------- /** * 私钥加密,传递私钥和需要加密的数据过来 written:yangxingyi Date:2018-11-26 */ function RsaEncrypt($str,$private_key){ $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id if(!$pi_key) return'私钥有误'; openssl_private_encrypt($str,$encrypted,$pi_key);//私钥加密 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 return $encrypted; } /** * 公钥解密,传递公钥和需要已加密的字符串过来 written:yangxingyi Date:2018-11-26 */ function RsaDecrypt($str,$public_key){ $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的 if(!$pu_key) return '公钥有误'; openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 return $decrypted; } $rs1 = RsaEncrypt('小姐姐你好啊!',$private_key); var_dump($rs1); $rs2 = RsaDecrypt($rs1,$public_key); var_dump($rs2);

如果你看到图片这样的输出,就没毛病了,说明你的公钥和私钥是一对的

openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解_第1张图片


#介绍下钥匙生成(win下):openssl钥匙生成工具点击下载

下载文件后解压,我这里放在D:\openssl目录下
openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解_第2张图片
打开cmd控制台 ,就是cmd进入黑窗口啦,哈哈哈…
执行命令下面命令
d:
cd openssl/bin

先生成私钥,参数1024/2048可选择rsa_private_key.pem 这个是生成的文件名,可以自定义,建议不要有中文
执行:openssl genrsa -out rsa_private_key.pem  2048 

#再根据私钥生成公钥文件
执行:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

然后就躺着一对密匙了:
openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解_第3张图片

然后编译器可以打开它,不推荐记事本打开
定义变量

$PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----
************************
************************
************************
-----END RSA PRIVATE KEY-----';

温馨提示:开始和结束的标签都要保留的哦,不要扔掉咯!!!!!!!!!
觉得有用就搬走吧,不用联系我的!!!!

你可能感兴趣的:(php)