文本加密:常见的密码加密解密方法
前言
几年前国内一家大型的开发者论坛数据泄露,其中用户密码竟然是以明文方式保存的,很不幸我的常用密码在那时候被泄露了。这件事足以证明我们在保存用户密码的时候是不能用明文保存的。那么问题来了,用什么样的方法加密密码才安全呢?下面介绍一些常见的加密用户密码的算法。
散列函数 HASH
你可能不止一次听到过类似“MD5加密密码”或者“SHA1加密密码”等说法。这里面其实有一个误区MD5之类的算法是一种不可逆的算法,也就是说没有办法解密。这种算法有个统一的名字:散列函数。维基百科给出了解释:
散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
散列函数有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
MD5 SHA1 SHA256这些都是散列函数。由于现代计算机算力越来越强大对MD5进行碰撞试验的成本越来越低,目前来说直接保存密码的MD5值已经不再安全了,但并不是说明MD5本身有问题,如果使用MD5保存用户密码的话可以对密码进行多次MD5,这样我们的程序依然是安全的。还有MD5在验证数据完整性的应用上也具有一定的优势。
SHA1和SHA256属于一类算法SHA的不同版本,SHA1是SHA的较旧版本,可生成160位哈希值,而SHA256是SHA2的一种类型,可生成256位哈希值。更推荐使用SHA256,毕竟新版本安全性更高一些。
加密解密
DES算法:数据加密标准(英语:Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门而在开始时有争议,DES因此受到了强烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展。
AES算法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
RSA算法:RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。
这几种算法有个特点就是可以被解密,在实践过程中使用这种算法对项目的后期维护会增加很多便利。要注意DES算法已经被证明不是一种安全的方法,尽量不要在新项目中使用。
编码
类似base64、base62这种算法是对数据进行编码的方式,只是修改了数据表现方式,并没有加密功能。一般用来配合其他算法使用。
最后还是要说安全无小事,我们在项目开发中还是要尽量的注意数据安全的问题,避免造成不必要的麻烦。
文章出处:文本加密:常见的密码加密解密方法