1单向散列加密
单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,不可逆的。常用的单向散列算法有MD5,SHA等。
比如网站中,用户密码,一般可以进行MD5加密后保存,用户登录时,对用户输出的密码进行加密后和数据库密文进行比较,如果一致,则验证成功。
为了加强计算的安全性,可以对数据加上密钥,增加破解的难度。
推荐使用 apache common的 commons-codec的 jar包 比如(commons-codec-1.8.jar)
/** * 字符串进行MD5加密 * @param str * @return */ public static String encryptMD5(String str) { return DigestUtils.md5Hex(str); } /** * 将字符串 SHA 加密 * @param str * @return */ public static String encryptSHA(String str) { return DigestUtils.sha1Hex(str); }
2对称加密
对称加密是指加密和解密使用相同的密钥。明文可以根据密钥进行加密,密文可以根据密钥进行解密为明文。
对称加密算法常用于Cookie加密,通信加密等场合。常用的算法有DES,RC,AES算法等。
对称算法优点是算法简单,加密解密效率高,系统开销小,适合对大量数据加密。是一种传统加密手段,也是最常用的加密手段,适用于绝大多数需要加密的场合。
java-DES加密/解密 -demo:
3非对称加密
非对称加密,是指加密和解密使用不同的密钥,其中一个对外公布,称为公钥,另外一个不对外公布,称为私钥。用公钥加密的信息必须用私钥解开,用私钥加密的信息只有公钥才能解开。
非对称加密技术常用于信息安全传输,数字签名等场合。常用算法有RSA算法等。
比如信息发送者获得信息接受者的公钥,对提交信息进行加密,通过非安全传输通道将密文发送给接受者,接受者得到密钥后,用自己的私钥进行解密,获得明文信息。在传输过程中遭到信息窃取时,窃取者没有密钥无法获得明文。
数字签名过程相反,签名者用自己的私钥对信息进行加密,发送接收方,接收方使用签名者的公钥对信息进行解密,由于私钥只有签名者拥有,那么发送的信息具有签名性质,不可抵赖。
java-RSA加密/解密-demo :
4总结
在实际应用中,可根据实际需要可以混合进行使用。同时加密技术中,密钥是十分关键的存在。一旦密钥泄露出去,加密信息就会失去秘密性。在一些安全性高的项目中,密钥和算法可以独立部署,向外提供加密和解密服务,由专人维护,系统性能开销较大。或者加密算法放在应用中,密钥单独部署,定时更新,密钥可进行切片存储多台服务器,每台服务器有专人管理,大家各司其职,没人可以查看完成密钥信息。
参加文献:《大型网站技术架构》——李智慧(这本书真是个好书,可以大大开拓程序员的眼界)