今天来讲一下加密,讲的是md5的相关知识科普。
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
MD5主要特点:
不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样
一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个。比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4 * 10^38,这个数字是有限多个的,而但是世界上可以被用来加密的原文则会有无数的可能性
由于md5的是不可逆的,所以并没有解密一说法。那么md5广泛应用在什么地方呢?
用于密码管理
当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。为了增加安全性,有必要对数据库中需要保密的信息进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也不能得到原来的密码信息。MD5算法可以很好地解决这个问题。
当我们登录时候,需要对比客户输入的密码md5值和数据库的是否相同就行,当md5值相同,那就是登录成功,否则就是登录失败。所以一般情况下,我们上一些网站或者软件上的密码,无论是公司什么级别的人,都是取不到的。在我们看来,MD5值就是一串没有规律的乱码而已。所以一般我们丢了密码,那就只能重置密码,我们会将保存的密码再一次用md5加密,覆盖原来已经保存的,而保存在数据库里面的就成了另外一个md5值。
上面总结的是后端服务器常用到的MD5加密,给大家科普一下数据库是里面是怎么保存的。而实际应用中有很多直接可以使用的md5模块,我们直接使用就行了。
import hashlib
m = hashlib.md5()
m.update(b'123')
m.hexdigest()
#加密后结果 202cb962ac59075b964b07152d234b70
这是用python做的一个简单案例。
欢迎和我讨论有关程序的问题,也可以答疑。关注公众号:诗一样的代码,交一个朋友。