没有绝对的加密算法,实际工程上都是考虑到破解的成本即可。
比如,破解你的一个漏洞,能获得10元的收益,但是需要花费大型机器运行1天,成本就划不来,没人愿意干这个事情。
加密算法
-
非对称加密RSA
解密基于大数因式分解成两个质数,位数越长越安全,1024位RSA密钥基本安全,2048位密钥及其安全。银行和支付宝使用此种加密算法
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html -
AES、DES 对称加密
解密难度依赖位数,大型机已经可以破解128位,所以现在最低也要256的AES -
MD5 哈希算法的一种,算出的是一个固定长度的数字,算法是不可逆的,常用于密码存储,签名效验。是可破解的,虽然不可逆,但是目前可通过彩虹库(一个存储着前后映射关系的库7.6万亿条记录)暴力破解。
工程上,采取加盐的方式,这样破解就需要先生成加盐后的“彩虹库”,大大增加了破解的成本和时间。
我看微信支付的回调签名就是用的这种方式
第三方支付渠道加密选择
-
支付宝
RSA加密,两对公私钥对
客户端保存公钥public1,私钥private2
支付宝服务端保存私钥private1,公钥public2
客户端请求的数据:公钥加密,私钥签名
支付宝返回的数据:私钥解密,公钥验证签名
(1)其中私用强烈推荐RSA2签名(SHA256)验签,极其安全
支付宝支付签名规范
-
微信
用的是对传输的数据字段,加盐md5生成签名字段,接收端去验证签名的方式,保证数据安全,没有去加密明文的参数数据。大致例子:
签名=MD5(key1=value1&key2=value2&randomNum=?&key=?.......),其中:
(1)Key1,key2等是参数,可以约定顺序和参与签名的字段
(2)randomNum是每次请求生成的随机数,起到加盐的效果
(3)key值是双方都知道的一个密钥,上传至微信服务端保存
以上三点都是起到,增大破解难度的效果。
微信支付安全规范
总结:实际工程上,基本就是用上述两种方案,或者为了区分通用做法稍作修改,就满足需求。
网友评论