Python学习【124】:Python哈希算法:这才是存储密码的正确姿势
一、学前花絮
我们之前的文章提到过关于数据安全的话题,主要针对目前国内、国际的加密算法进行了探讨。加密算法与哈希算法之间并不存在包含的关系,而是一种组合关系。比如哈希算法可以用到加密算法中的密码派生密钥、数据在传输过程中未被篡改的消息验证码、数字签名等。哈希算法是数字世界的指纹,让我们以python为工具,通过示例深入了解如何使用哈希算法。二、Python实现哈希算法并示例
2.1 什么是哈希算法?
哈希算法(Hash Algorithm) 是一种将任意长度的输入数据,通过数学函数转换为固定长度输出(哈希值)的算法。这个输出就像数据的“数字指纹”——不同输入几乎不可能得到相同的输出。最简单的理解:哈希算法就是一个“榨汁机”——你放进整个水果(任意数据),出来的是固定容量的果汁(固定长度哈希值),并且无法从果汁还原出完整的水果。从以上结果可以看出,无论原字符串是什么内容,转变为hash值后都是32位。2.2 哈希算法的四大核心特性
也就是说原密码字符串确定的情况下,无论调用hash算法多少次,生成的hash值是相同的。这与上一篇文章的随机数有本质区别,随机数是每次输出结果不同。也就是说根据hash值无论如何不能反推出原来的密码,这也是很重要的一个环节。如果加过密的内容,能够被反推出来,说明密码是失败的。比如两个不同的原文,经过加密算法处理之后,密文是否会存在一致的情况?MD5算法已经被证实可碰撞,在某种程度上是不安全的。但sha-256目前安全。即便两个有微小差异的字符串(比如多了一个!号),它们生成的哈希值几乎完全不同。2.3 生活中的哈希类比
2.4 Python中的哈希算法生态
Python通过hashlib模块提供多种哈希算法:以上内容中,哈希算法包括MD5、SHA等多种,理论上位数越多越安全(反推的可能性越小)。2.5 哈希算法的五大核心应用场景
以上场景,比如在项目中存储系统或者用户的账户、密码的时候,如果只存储密码的明文到数据库中,那么只要能够查看数据库的人就能够看到密码。如果需要保密的话,还是用hash处理一下密码然后把密文存储到数据库中。在大数据处理等场景中,经常会遇到把某些目录下的文件传到另一个地方(比如数据中心),那么文件是否传输完整?可以事先把文件经过hash处理,然后到另一个地方再验证这个hash值是否与之前的相同。这就是文件完整性校验。2.6 哈希算法安全等级对照
2.7 以上内容的总结
哈希算法是密码学的基石,它通过数学变换为数据创建唯一的数字指纹。理解哈希的核心特性——确定性、单向性、抗碰撞性、雪崩效应——能帮助你正确应用它。- 存储密码必须加盐迭代哈希,绝不使用MD5/SHA-1
- 需要不可预测的唯一标识用secrets,不用hashlib生成随机值
哈希算法不是加密算法——它不隐藏信息,只是创建指纹。这个区别至关重要:哈希不可逆,加密可解密。在数字世界里,哈希算法就是我们识别数据身份的DNA检测仪。三、小结
今天我们针对哈希算法及python实现进行了探讨,之前我们提到过,在互联网、大数据发展到今天的程度,面临着海量数据处理与数据安全同时存在的问题。在享受数据业务给我们带来便利的同时,也要有安全意识。而python的很多模块提供了数据安全方面的解决办法。