本文共 2557 字,大约阅读时间需要 8 分钟。
按照等保要求,密码类的信息必须经过RSA加密后才能传递:
需要对密码传输过程中进行加密方式传输。
如采用md5加验或SM1、SM2、SM4、3DES、AES、RSA加密算法, 同时也不要直接采用暴露在互联网上的md5、base64算法、URL编码转换。
虽然仅仅用base64来加密已被禁止,但是思路还是一样的:“客户端使用js加密,服务端使用php解密”。
jsencrypt.js
和jsrsasign.js
都可以实现加密解密,但jsencrypt.js
更方便,jsrsasign.js
更全面;jsencrypt.js
加密后就已经是base64格式
,而jsrsasign
需要分两步分别实现RSA加密
和base64编码
。
好了,话不多说,言归正传。
RSA基本原理就是客户端上有一把公钥,服务器上有一把私钥,这两把钥匙长相不同,但有着不可思议的数学关系,能互相识别对方。
客户端传递信息前,先利用公钥把信息加密(加密过程有随机数参与,所以每次结果都不同),到达后,服务端利用私钥再把信息解密还原成原信息。
正是由于公私两把钥不一样,甚至其中一把是外人所不知的,所以这种加密方式也叫“非对称加密”。
实际使用时把公钥对外公布,可以由很多客户端拥有,而私钥只限服务端,这样由于没有私钥,即便客户端传递数据时被人拦截,那这些被拦截的数据也是无法解密的。
为了进一步提高安全性,还可以加入签名,这里就不赘述了。
参考学习
《》 《》配置并获得公钥和私钥。
jsencrypt.js
jsencrypt.min.js
安装到指定目录。 jsrsasign.js
jsrsasign-all-min.js
安装到指定目录。 配置服务器php.ini
去掉;
,激活extension=openssl
获取公私密钥
二选一即可本文代码案例以第二种“在线生成”后的公私钥字符串作为变量进行操作。
//注意每隔64位必须要有一个换行//公钥-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCC2Kh46ZE2/k6hBfRHXOm37lQhQ9g7phdw2jGo0KNgW+wxW2pmZzQhLg+Dx9FyEXa3j0YraktnCIBkx816DLw/xUIhRObjYX4+5hUnv6IGtHf5pNyP9v/utiRdkko+Vj1BDWtI4lw/0DXruLJIV06EIf95TFfZaEk81/EO31FdpQIDAQAB-----END PUBLIC KEY-----//私钥-----BEGIN RSA PRIVATE KEY-----MIICWwIBAAKBgQCC2Kh46ZE2/k6hBfRHXOm37lQhQ9g7phdw2jGo0KNgW+wxW2pmZzQhLg+Dx9FyEXa3j0YraktnCIBkx816DLw/xUIhRObjYX4+5hUnv6IGtHf5pNyP9v/utiRdkko+Vj1BDWtI4lw/0DXruLJIV06EIf95TFfZaEk81/EO31FdpQIDAQABAoGATyoMTBNsY2xbYDr8/4wsb7cHOZUVp4km14V71BpfLnaPIZGgf1JjjMuUYXOsuantPMO3fZ7y/eR74f2syPIZllFqSI0CP1HkDyTH5BsLqKqTmzWcbvrWx1Pc2DisOCf9KVz4o/Scly3igI8Nblrk5zP03NMBb7dqyNzqsP2i6gUCQQDGojaHEWZ4qTZmwFhTccKX/DHc1vJesjS3JQHRU6TDWSML476KGoH3+S23XRfRsIFzN1QWrhqfopfgphP2gcPnAkEAqKKnmAOY0BhzMh0D7q94dtGZbg/MxQPpBRWvEcLsragv8NilM5Mp6gUjLcWSgEoBq4VcywQE/AOosXbOaQcgkwJAdedRgIkGjza50PH5O8a54CdVnaWFBkq3WcLAunTwxvfBAsyzjBxB62RgC4hZnCEuJarA4hmEOh90EWfjT54lHwJALSni2MOd2Z2yvGko9HPqP2hDP0bcAKfbcJEuIgOif5/btxVOqVFwmExn74pKgjFP4TAGehjJfPU96Ml43ogaIQJAYpbORQgUvJilLJGTIisWNF8Wa+lEt1J4tn7p47IDMOAaCwcbmDGnhnh67CXrwwJvb4F8tK/NiwNqlLhyDrONyg==-----END RSA PRIVATE KEY-----
演示案例目录如图:
客户端:index.html
参考学习
《》 《》 《》 《》 《》参考学习
《》 《》demo版本点击此处:《》
\n
和 +
;//例如var pubKey = "-----BEGIN PUBLIC KEY-----\n" + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCC2Kh46ZE2/k6hBfRHXOm37lQh\n";
js
获得的 value
就不用手动增加 \n
来改写公钥了;//例如
+
变成 空格
,所以要完成一次过滤。当然,直到目前我还没发现有这个问题;str_replace(' ','+', $p)
转载地址:http://qxkpi.baihongyu.com/