3DES加密,需要3个显式参数 –只要参数全部相同,3DES加密结果也是相同
- 待加密数据 data
- 加密密码 key
- 偏移量 iv
看起来十分简单,但是3DES加密有其他很多种隐式参数:
- mode: CryptoJS.mode.CBC
- padding: CryptoJS.pad.Pkcs7
mode还有其他的类型,padding也是
RSA签名 –每次签出来的电子签名都是不一样的
显式参数有:
- 要发送的数据 data
- 本地私钥 private_key
隐式参数有:
- 签名格式: RSA-MD5、RSA-SHA256
- 最后要转成什么格式: base64、utf8
PHP中使用的OpenSSL.sign使用的私钥是RSA原生的,而Java使用的是PKCS8格式的,这两种格式需要使用OpenSSL客户端转一下,node.js使用的和PHP一样
这个项目非常小,写下来一个脚本不到100行,却写了我非常的久,原因我分析了一下:
- 放假回来,水平的确下降了非常多,很多都忘了
- 前期appKey出了点错误,让整个项目停滞了很多天
- 运维那边太忙,没有时间来帮我配置测试环境,无故浪费很多时间
- 和第三方交流有代沟,没有能及时的发现问题的真正所在,一直没有发现是RSA私钥的格式问题
- 自己的集中度不够,经常写一会儿写不出来就去划水
- 3DES加密和RSA签名之前没有接触过,甚至连签名是干嘛的都不知道,自然会出现一些现在看来很傻的行为
- js对这两个算法的支持不是非常友好,尤其是这两个算有很多的变形,例如3DES有很多中mode,padding,RSA需要使用buffer和base64
- 没有非常认真的去分析问题(如果早一点配好RSA的PHP测试环境,知道自己的RSA签名代码没有问题,就可以模块化,一步步拆分出来,定位bug) –PHP产生的3DES加密后的密文拿来在node环境中跑没有出现问题,可以得出node RSA加密部分代码没有问题,但是换了数据就报55,代表可能是3DES加密有问题,或者3DES加密后的编码格式有问题,分开一步步去测试