冠县网站建设价格,苏州网站定制公司,网站建设企业哪里好,电子商务网站开发技术论文算法介绍 Python的hashlib提供了常见的摘要算法#xff0c;如MD5#xff0c;SHA1等等。 什么是摘要算法呢#xff1f;摘要算法又称哈希算法、散列算法。它通过一个函数#xff0c;把任意长度的数据转换为一个长度固定的数据串#xff08;通常用16进制的字符串表示#xf…算法介绍 Python的hashlib提供了常见的摘要算法如MD5SHA1等等。 什么是摘要算法呢摘要算法又称哈希算法、散列算法。它通过一个函数把任意长度的数据转换为一个长度固定的数据串通常用16进制的字符串表示。 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest目的是为了发现原始数据是否被人篡改过。 摘要算法之所以能指出数据是否被篡改过就是因为摘要函数是一个单向函数计算f(data)很容易但通过digest反推data却非常困难。而且对原始数据做一个bit的修改都会导致计算出的摘要完全不同。 我们以常见的摘要算法MD5为例计算出一个字符串的MD5值 复制代码 import hashlib md5 hashlib.md5() md5.update(how to use md5 in python hashlib?) print md5.hexdigest() 计算结果如下 d26a53750bc40b38b65a520292f69306 复制代码 如果数据量很大可以分块多次调用update()最后计算的结果是一样的 md5 hashlib.md5() md5.update(how to use md5 in ) md5.update(python hashlib?) print md5.hexdigest() MD5是最常见的摘要算法速度很快生成结果是固定的128 bit字节通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1调用SHA1和调用MD5完全类似 import hashlib sha1 hashlib.sha1() sha1.update(how to use sha1 in ) sha1.update(python hashlib?) print sha1.hexdigest() SHA1的结果是160 bit字节通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512不过越安全的算法越慢而且摘要长度更长。 摘要算法应用 任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢方法是存到数据库表中 namepasswordmichael123456bobabc999alicealice2008如果以明文保存用户口令如果数据库泄露所有用户的口令就落入黑客的手里。此外网站运维人员是可以访问数据库的也就是能获取到所有用户的口令。正确的保存口令的方式是不存储用户的明文口令而是存储用户口令的摘要比如MD5 usernamepasswordmichaele10adc3949ba59abbe56e057f20f883ebob878ef96e86145580c38c87f0410ad153alice99b1c2188db85afee403b1536010c2c9考虑这么个情况很多用户喜欢用123456888888password这些简单的口令于是黑客可以事先计算出这些常用口令的MD5值得到一个反推表 e10adc3949ba59abbe56e057f20f883e: 123456 21218cca77804d2ba1922c33e0151105: 888888 5f4dcc3b5aa765d61d8327deb882cf99: password 这样无需破解只需要对比数据库的MD5黑客就获得了使用常用口令的用户账号。 对于用户来讲当然不要使用过于简单的口令。但是我们能否在程序设计上对简单口令加强保护呢 由于常用口令的MD5值很容易被计算出来所以要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5这一方法通过对原始口令加一个复杂字符串来实现俗称“加盐” hashlib.md5(salt.encode(utf8)) 经过Salt处理的MD5口令只要Salt不被黑客知道即使用户输入简单口令也很难通过MD5反推明文口令。 但是如果有两个用户都使用了相同的简单口令比如123456在数据库中将存储两条相同的MD5值这说明这两个用户的口令是一样的。有没有办法让使用相同口令的用户存储不同的MD5呢 如果假定用户无法修改登录名就可以通过把登录名作为Salt的一部分来计算MD5从而实现相同口令的用户也存储不同的MD5。 摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法不能用于加密因为无法通过摘要反推明文只能用于防篡改但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。。 转载于:https://www.cnblogs.com/rendawei/p/7061971.html