加密分可以加密和不可逆加密
jar包: commons-codec.jar
MD5加密
String md5 = DigestUtils.md5Hex("000000");
System.out.println(md5);
SHA1加密
String sha1 = DigestUtils.shaHex("000000");
System.out.println(sha1);
这种方式适用于服务端加密,可以讲密码用密文存储
密码加盐:
盐值固定:一系列很难猜到的字符加到密码的前面和后面,这串盐值应该很难被破解掉,或者破解了需要付出很长的事件才可以。但是这种方式也不是绝对安全的,MD5加密依然是有风险的。
盐值不固定:在密码的前后加上一串字符,这个字符是不定的,可以使用户的ID、注册日期等等,这种方法加密更难被破解。安全系数较高。
虽然这种方式安全系数较高但是并不是说这种就是最安全的,当黑客获得了这个盐值生成的算法,那么加密和不加密就是一样的。
JavaScript加密
http://code.google.com/p/crypto-js/
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha1.js"></script>
<script>
varhash = CryptoJS.SHA1("Message");
</script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script>
<script>
varhash = CryptoJS.MD5("Message");
</script>
这种方式适用于客户端加密,在客户端点击了登录按钮的时候将密码加密,但是这种加密方式虽然在网络上不是明文传输,但是当用户获得了从客户端发送过来的经过加密的密文,经过彩虹表的对照还是可以获得用户的明文密码,并且当黑客以密文的形式将密码提交给对应的处理Post的接口,那么将依然对安全方面没有任何保障。
为了保证更好的加密效果推荐使用Https来对登录和注册进行加密,也即是说在http层上建立一个SSL传输层,使得用户发送的数据在传输到网卡上的时候就是已经被加密过的了。但是这种方式加密的数据,服务器在收到相应的数据之后还得再继续解密,解密之后,获得用户请求的数据,服务器在响应用户请求之前,还要对用户请求的数据进行加密,这样会非常消耗服务器的硬件资源。这种方式会比普通的http协议多消耗30%的硬件资源。