重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
题主你可以使用 md5 或者 sha1 进行初步处理,但为了更加安全,请你同时加上两个 salt,一个静态 salt,一个动态的 salt。以 md5 为例:\x0d\x0a假设通过 POST 传来的密码为 $_POST['password'],在存入 DB 前先进行如下的操作:\x0d\x0a$password = hash('md5', $_POST['password'].$staticSalt.$dynamicSalt);\x0d\x0a\x0d\x0a为了保证动态 salt 的唯一性,可以这样操作:\x0d\x0a$dynamicSalt = hash('md5', microtime());\x0d\x0a\x0d\x0a对于动态的 salt 可以与生成的密码一起保存在 DB 中,而静态 salt 则可以直接放在类文件中(例如定义为一个静态属性即可)。\x0d\x0a首先谢谢题主采纳了我的答案,但是我之前的回答并不是最佳答案,之所以有此加密的想法源于自己所读的源码可能比较老,所以并没使用上较新版本的加密方法,例如 bcrypt等。\x0d\x0a此外,第二点,感谢评论中几位前辈的提点,已经明白设置静态 salt 的意义并不大,生成一个较长的动态 salt 已然可以解决问题。\x0d\x0a\x0d\x0aLZ应该采用加盐HASH。\x0d\x0a如何“腌制”密码呢?\x0d\x0a=_,=\x0d\x0a正确的格式应该是,用户password+动态的salt\x0d\x0a动态的salt不能像2L所说的,使用microtime,因为时间在某些情况下不够随机,而且是可能被猜解的。\x0d\x0a这里推荐一个我用的加盐HASH\x0d\x0a$salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM));\x0d\x0a$password=sha1($register_password.$salt);\x0d\x0a\x0d\x0a解释:\x0d\x0a首先使用mcrypt,产生电脑随机生成的,专门用户加密的随机数函数。\x0d\x0a第二步,把得到的随机数通过base64加密,使其变长并且不利于猜解。\x0d\x0a第三步,把得出的盐拼接到密码的后面,再对其使用sha1进行哈希\x0d\x0a再把password存入到用户的数据库。\x0d\x0aPS:为何不用静态的salt?没有必要,使用一个动态随机足够长的盐足矣。\x0d\x0a为何不用MD5?因为长度不够。\x0d\x0a为何没有使用多次HASH?因为这样反而容易发生碰撞。\x0d\x0aHASH好之后怎么使用“腌制”好的密码?\x0d\x0a用户注册-提交密码-产生salt-腌制好的密码存入数据库-salt存入数据库。\x0d\x0a用户登录-提交密码-调用salt接到提交密码的后面-进行HASH-调用之前注册腌制好的密码-对比HASH值是否和这个密码相同
站在用户的角度思考问题,与客户深入沟通,找到密山网站设计与密山网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、做网站、企业官网、英文网站、手机端网站、网站推广、申请域名、网站空间、企业邮箱。业务覆盖密山地区。
首先来说,目前常用的方式有两种,
浏览器端安全控件,淘宝、银行等均采用该方式,优点是安全系数高,缺点是投资较大;
使用ssl方式完成登陆,安全系数一般,投资较低(需要申请ssl证书)
至于使用js在post前加密从原理上来说是根本没有意义的,就像你说的,js是明文的,所以破解并不难。
如果你要开发的应用对安全性有要求,建议采用ssl方式即可,如果对安全性要求极高,选择安全控件。
事实上,对于80%的网站,登录信息安全问题并不重要,尤其是抓包导致泄露的几率极低。因为抓包这个事其实技术门槛还是很高的,如果盗取的账号没有极高的价值很少有人会去做。就像微博,QQ等,服务商也只是提供了各种密保,而没有针对账号提交过程提供太大的保护。
99%的账号丢失问题来自于木马,通过监控键盘事件完成盗取,而这种行为js根本无能为力。甚至前面说过的两种加密方式也同样。
对于普通的网站,通常的手法就是要求认证用户的安全邮箱,当密码丢失的时候可以通过安全邮箱重置密码,这就足够了。不建议尝试额外的手机找回密码、身份证绑定之类的功能,除非您的网站已经足够强大,否则有一点安全知识的人都不会在莫名其妙的网站上输入自己的手机号和身份证的。同理,就算你提供了安全控件,很多人可能也不会选择安装,因为你没办法证明自己提供的安全控件是安全的。
不要把抓包想的太容易哦,谁知道用户什么时候会登录,从什么地方过来,发到哪里,总不能24小时盯着吧?费这么大劲偷到了,连几千块钱都不值,他不是白费力气吧?能用这种方式盗取信息的人,你觉得他会对万把块的小钱感兴趣吗?除非是有人花钱请他对你的网站恶意攻击。也简单,平时注意备份就好了。和洪水地震的几率差不多。
如果要加密的话,只能用js版md5加密密码,用户名估计还是得明码传送。因为md5算法是不可逆的,你后台无法对已用md5加密的字符串进行解密,除非用暴力破解。
如果真的对安全性要求那么高,不如直接对appache设置为https的安全链接,类似网银的做法。这样所有的post内容在发送时都是加密的,到后台以后会自动解密。
不过这种方法速度上会比一般的http慢。
解决方法很多!如果要加密的话,只能用js版md5加密密码,用户名估计还是得明码传送。因为md5算法是不可逆的,你后台无法对已用md5加密的字符串进行解密,除非用暴力破解。如果真的对安全性要求那么高,不如直接对appache设置为https的安全链接,类似网银的做法。这样所有的post内容在发送时都是加密的,到后台以后会自动解密。不过这种方法速度上会比一般的http慢。