结论:不使用HTTPS,单纯对密码加密传输,是无法保证安全的。
写了一个简单的 RSA加密DEMO(包含 Java后台,web前端,Android,iOS)
https://github.com/luffyjet/RSAEncSignDemo
密码加密传输的一些意义。
1、数据库不存原密码,也防止被存原密码;
2、防止数据库被黑后造成密码泄露的问题;
3、hash后的密码格式统一,减少麻烦;
4、防止原密码被利用在其他平台,减少在其他平台的信息泄露(很多用户习惯在其他平台注册时使用相同的密码,太多密码时怕忘记。被抓的hash密码,也就只能在我网站用,其他网站也用不了);
5、防止原密码暴露,伤害了用户感情(谁都不想自己的密码被人知道)。
web前端的加密手段
1.前后端使用RSA加密关键数据。支付类应用使用较为常见。开源RSA加密库jsencrypt
2.验证码结合密码进行MD5加密,可以有效的解决重放问题。参考
3.以上的方式都要配合前端js的混淆加密,增加破解的复杂度,才有意义。参考
Android端的加密手段
1.对代码混淆,增加破解难度
2.套壳加固,进一步增加破解难度
3.关键加密代码,用c++编写封装到so,增加破解难度
4.使用加密算法加密请求参数,如:MD5,RSA等,RSA参考
5.使用 HTTPS
iOS加密
1.对代码混淆,增加破解难度
2.套壳加固,进一步增加破解难度
3.使用加密算法加密请求参数,如:MD5,RSA等
4.使用 HTTPS