【Go语言】存储密码小技巧

今天简单谈谈密码储存安全

一般一个网站都会有登陆注册等等功能,我们就遇到了怎么保存用户信息这样子的问题,而同时我们最关心的是密码的保存。很多做web 开发的同学都不怎么处理密码,存进数据库的时候也是明文存储,这样子很危险。我们作为开发者要尽量避免自己写的代码出问题,那么现在就简单谈一谈在平时开发中保存密码的小技巧。

【Tip 1】自定义加密函数
这种其实是最容易想到的,也是最容易实现的。例如,我们可以用一套简单的规则将原本看起来有规律的密码变成另一串毫不相关的字符串。主要的思想就是制定一套转化规则,例如:“数字、字母按照顺序收尾相接,所有的数字d 都做前移3位处理,所有的字母都做后移5位处理”,这样的规则就有了如下的对应关系:2->5  ,  7->0  ,  9->2 ,  a->v , s->n , g-> b , 等等这样子。代码实现如下:

这样的一个函数就可以实现上述规则。

这样的处理看起来还是有一点儿用的,只是在当代真的很不适合使用。这种规则性的东西,计算机可以暴力破解,所以只能出现在简单的场景中。

【Tip 2】单向哈希算法
这种就是算是现在使用很广泛的了,用哈希算法加密以后,我们就可以获得一个唯一的字符串,并且这种算法当下很是流行。MD5加密的串一般是没有办法解密的。代码如下:使用前要引入:  “crypto/md5″ 这个包

golang 提供标准的MD5算法,很多语言中都是提供的,这种方式相对来说比较保险。
常见的还有SHA-1和SHA-256算法,在golang中都是大同小异的处理方式。

在一般的应用中,我们可以用md5算法等等单向哈希方式加密我们的密码存在数据库中,而验证的时候也要把用户的密码先md5一下然后去比较这两个字符串是否一致。要记住数据库中存的密码一定要加密!

【Tip 3】“加盐”单向哈希法
单向哈希一直是个好方式,于是就变成了不好的方式了:知名度太广了!用的人太多了!还有很多专门做破解MD5为生的!那么我们就必须要换另外一种更加安全的方式。也许有人会想到二次哈希,三次哈希这种的方式,其实我们能想到,黑客想的肯定比我们多。现在介绍了一种加盐的方式,感觉还是很不错的,先上代码:

这次用的是SHA-256算法,这个加密的串比md5加密的更长。加盐法就是有这么一个技巧:在用户输入的密码上加一点额外的东西,然后在哈希。我们可以定义一个头定义一个尾,这种只有我们自己能够知晓。这样子的处理会将破解难度提高到一个新的档次,因为黑客们没有办法知道你究竟前面指定了哪些规则,不看代码是没有办法的!这样是前两种方式的结合,安全性大大提高,我们开发的时候最好使用这种方式!

OK ,今天就讲到这里。总之密码的保护是非常重要的,希望读者能够有所启发,在今后的开发中注意密码的安全。

刘凯宁@C2P
20140728

Share

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>