本文实例讲述了php的RSA加密解密算法原理与用法。分享给大家供大家参考,具体如下:
最近因为工作的需要,要倒腾支付宝支付相关的知识,因为支付宝应用了RSA加密机制,个人对此并不了解,所以在这里写下一篇总结。
1、生成公钥和私钥
要应用RSA算法,必须先生成公钥和私钥,公钥和私钥的生成可以借助openssl工具。
本次测验是在windows下进行的,可以到以下的地址下载windows安装包:http://gnuwin32.sourceforge.net/packages/openssl.htm,安装过程不再赘述。
安装过后,进入到安装目录的bin目录下,执行如下命令:
openssl.exe // 进入OpenSSL程序 genrsa -out rsa_private_key.pem 1024 //生成私钥,执行成功后可以在当前目录下看到生成了rsa_private_key.pem文件 pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt //如果你使用的java,需要将私钥转换成PKCS8格式 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem //生成公钥,执行成功后可以在当前目录下看到生成rsa_public_key.pem文件
公钥rsa_public_key.pem的内容:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc5nSC6mHl9bmM6L8n7Sq1+Ft6
VF8LcU3jst8RIy7WqXXd5XZomc0cJLxVz3Vc0vgUKKJyP6q2ozDOCFgCp7Q9InFg
ngtNVLEJ1+Nm0+snUDbYbnrfW8wwSPG0jPQ73CgMxOdv+IGhir6mEITbdEh+ZsVc
GRd0OvKYIg+Itgk3/QIDAQAB
-----END PUBLIC KEY-----
私钥rsa_private_key.pem的内容:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDD4KA0yU7EG7ZA32OAVDHlwXf9LYywXGn7Ma9LffnFL57cpYoQ
Wf0Oz8FE9/UnjFOeHs2XjDrhe+uqVtYX/9Vi/znJgP9D7hpTo2NJHM/AUykD+itl
cie2Tu+sjJQi0JFVcpc3D0ooTBhng35406CucRaOn/a52mxQnGtA4AmsSwIDAQAB
AoGAG25nwTy39SrUWT1vl9cyrbRsc15fp4sppG4O2Imp4v2KR+g+749KqzpZHKmF
AabbRveVXzXaQR2zoUVL8kx3u4hqY4M/S1AcOxNPIJKB703XxA1yf2Ta2CvLsWTm
tsDWRW1WudF18yOZf3q7aoyMhpBUMlmhH4mvIYWOPFj0zaECQQD4A11Q8sfpOcIK
fMz5jJymLMZ9P8gxNbafwjxTdTXht/MUprEAePslP3AeyKBMJNYGs04/lOQzksp+
ZG6j7/XzAkEAyi9zj8EaPlleAil8mB5wDWiibQ/Z92nMLSUmH5FoO013dvumBI8c
CcP1/go2sj3H4RQEWycr360yTubNkkHOSQJAcRRPos3fOkZ8Y329k3Z6IgY+RfMj
2tQLvVG5YbAKbi0J5vuNrpJ6p+QBwfdlpvIQp6NvZOwFFEK0kuZFz/dj4wJBALyc
cZCMUoARfEpGC24ZDuzjTIqzO+G7d3Yx7pOKYRLZXHXJogEkw8I0ZXmca5PxYFIP
C1VBgINEHedPFjy3WMkCQEh3FG0xDpUFXETct5L1whT8lsN0EK3ZmcfDePcbKuHW
iE5pbNn7ytpVT+jiT3+FVEZVSZCiW0lDnyd86Ppos5g=
-----END RSA PRIVATE KEY-----
公钥和私钥生成好了之后,私钥自己保存,将公钥交给第三方即可。
2、php的RSA加密解密
在做加密解密之前,首先要确保php已经开启了openssl拓展,可以通过phpinfo()函数进行查看。
通常情况下,有以下两种情形:
①通过公钥加密,通过私钥解密;
②通过私钥加密,通过公钥解密;
支付宝的业务场景属于第二种情形:
- 业务方支付宝发送支付请求,将sign参数通过自己的私钥加密过后发送到支付宝的接口;
- 支付宝方向业务方发送支付结果,将sign参数通过自己的私钥加密过后发送到业务方的notify接口;
下面就以支付宝的业务逻辑为例,实现以下第二种加解密:
加密:
$data = "我是待加密的字符串"; echo sign($data, 'rsa_private_key.pem'); /* 签名 */ function sign($data, $rsaPrivateKey) { /* 获取私钥PEM文件内容,$rsaPrivateKey是指向私钥PEM文件的路径 */ $priKey = file_get_contents($rsaPrivateKey); /* 从PEM文件中提取私钥 */ $res = openssl_get_privatekey($priKey); /* 对数据进行签名 */ //openssl_sign($data, $sign, $res); openssl_private_encrypt($data, $sign, $res); /* 释放资源 */ openssl_free_key($res); /* 对签名进行Base64编码,变为可读的字符串 */ $sign = base64_encode($sign); return $sign; }
执行后得到如下字符串:
geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h5adaREvsY/30jTld6kDkkQF8k3Eg+Y=
解密:
$data = "geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h5adaREvsY/30jTld6kDkkQF8k3Eg+Y="; echo decrypt($data, 'rsa_public_key.pem'); function decrypt($data, $rsaPublicKey) { /* 获取公钥PEM文件内容,$rsaPublicKey是指向公钥PEM文件的路径 */ $pubKey = file_get_contents($rsaPublicKey); /* 从PEM文件中提取公钥 */ $res = openssl_get_publickey($pubKey); /* 对数据进行解密 */ openssl_public_decrypt(base64_decode($data), $decrypted, $res); /* 释放资源 */ openssl_free_key($res); return $decrypted; }
第一种情形与第二种情形类似,在此不在赘述。
注:支付宝使用的加密函数是openssl_sign,之后的校验可以使用openssl_verify函数进行校验。
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode
文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》
希望本文所述对大家PHP程序设计有所帮助。
php,RSA,加密解密算法
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】