密码Hashing是如何发生的
如今,许多人在他们的手机、笔记本电脑和其他小工具上存储了很多敏感信息。
为了保证这些信息的安全,一些用户经常设置秘密密码、PIN码,甚至使用指纹等生物识别传感器来限制对信息的访问。
在本教程中,我们将具体研究使用密码的数据保护问题。我们将看到密码是如何被转换为哈希形式的,以及它们是如何被存储的。
我们将进一步讨论如何将密码从散列形式检索到原始格式。
什么是密码散列?
在设备上存储原始密码可能是不安全的,因为未经授权的各方可能会远程访问它们。这就需要进行密码散列。
Password Hashing 散列是将原始密码转换为一系列字符的过程,这些字符不能被人类轻易解释,也不能被未经授权的机器快速解码。
散列算法
散列可以通过不同类型的hashing algorithms 。
散列算法如何工作
散列算法对用户输入的纯文本进行转换。
例如,test123 被转换为一系列加扰的字符,如i7def35tvwu4i7v43dfgb23ieeb4 ,在检索过程中只能由该算法解码。
密码强度是由用户输入的纯文本的复杂性决定的。换句话说,文本越简单,密码就越容易被破解,反之亦然。
下面是一个可以利用的不同散列算法的列表。
SHA(安全哈希算法)
这是默认的散列算法,将普通密码转换成256位大小的散列密码。
SHA有不同的版本。例如,SHA1 ,产生160位的密码散列,而SHA2 ,输出为256位。
SSHA (加盐安全哈希算法)
这种哈希算法与SHA类似,只是它涉及到在原始密码中添加随机字符,以产生与预期不同的哈希值。
这个过程被称为加盐。
MD5 (信息加密算法)
这种格式是消息加密算法的第五个版本。它与SHA类似,只是它产生一个大小为128位的字符串。
MD5是常用的哈希算法,直到人们发现它可以为两个不同的密码生成相同的哈希值。
这种限制被称为collision 。
第1步 - 使用Python对密码进行散列
我们将使用一个实际的例子来看看密码散列是如何发生的。
在这种情况下,我们将使用SHA-256 hashing algorithm 和Python 。
就像任何IDE一样,replit ,允许你编写、运行和保存代码。在我们的案例中,我们将在平台上运行代码并查看其输出。
请注意所有的代码行,因为它们解释了散列过程中发生的步骤。
首先,导航到网站[replit.com]。
设置好环境后,从hashlib module ,导入sha256 构造函数,如下图所示。
from hashlib import sha256
现在,让我们把sha256 类实例化。
h = sha256()
使用update() 方法,然后我们将更新哈希对象。
h.update(b'test123')
然后使用hexdigest() 方法来消化通过update() 函数传递的字符串。这就是哈希值的十六进制表示。
hash = h.hexdigest()
最后,打印hash 变量来输出结果或输入文本的散列形式。
print(hash)
你可以运行一次完整的脚本,如下图所示。
from hashlib import sha256
h = sha256()
h.update(b'test123')
hash = h.hexdigest()
print(hash)
当你运行该脚本时,你应该看到以下输出。
f84ad825bc3e5ccc7f5e35b6a5e83cb79a998f106e79410ae382c7d43019b6d6
小结这个过程允许你将一个字符串改变为散列输出。
输入
example321
输出
f84ad825bc3e5ccc7f5e35b6a5e83cb79a998f106e79410ae382c7d43019b6d6
下面是代码输入和输出的可视化表示。

第2步 - 将哈希密码转换为纯文本
到目前为止,我们已经学会了如何将纯文本转换为哈希值。现在让我们来学习如何将密码哈希值转回纯文本。
互联网上有很多网站可以用来将哈希值转换为纯文本。
但是,要想成功逆转哈希值,该网站的字典里应该有密码哈希值。
免责声明: - 下面的例子仅用于教育目的。
让我们来看看最常用的密码哈希破解网站之一;Crack Station 。
访问Crack Station网站。
在提供的空格中输入你的密码哈希值,然后破解密码哈希值。
以下面的密码哈希值为例。
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
被破解后的哈希值的纯文本为:"A"。test
下面是整个过程的一个直观例子。

第3步 - 储存密码哈希值
现在让我们来看看密码哈希值是如何在计算机中存储的--包括Windows和Kali Linux。
Windows系统
在Windows中,密码哈希值被存储在C: 驱动器的一个文件夹中。要打开这些文件是很有难度的,因为它们是用启动密钥加密的。
这些文件的路径是。
C:/Windows/System32/config/SAM
C:/Windows/System32/config/SYSTEM
Kali Linux
另一方面,Kali Linux将其密码哈希值存储在etc/shadow 文件中,该文件仅以可读形式存在。
要访问这个文件,你应该有root访问权限。
密码散列机制
盐化
加盐是指在密码中加入随机字符的过程,这样产生的哈希值就会更复杂,未授权方就更难破解。
许多用户使用普通人的名字或他们宠物的名字的组合来生成密码。这带来了威胁,因为黑客有一个常用词的列表,称为dictionary 。
黑客可以生成这些单词的哈希值,并利用它们来匹配用户存储的密码哈希值。
为了解决这个问题,你应该设置一个不常见且难以解码的强密码。这就是密码盐化的作用。
它允许你在原始密码中添加一系列随机字符,生成的哈希值将与初始密码哈希值不同。
剥皮
当黑客利用SQL注入漏洞时,无论是否加盐,他们都可以完全获得你的密码哈希值。
为了解决这个问题,用户用对称的加密密钥对散列的密码进行加密。这个key ,被称为pepper 。
该密钥不作为密码哈希值存储在数据库中,以阻止黑客的入侵。
密码保护自己
很多用户账户都有被未授权方访问的风险。
这就要求使用强密码加强数据保护。
让我们看看如何实现这一目标。
使用多字符密码
一个强大的密码应该有一个不可预知的模式。这包括在你的密码中混合使用letters,numbers, 和symbols 。
这将产生一个复杂的哈希值,不容易被破译。
提示。避免使用你名字中的字符或可预测的数字。
经常改变你的密码
经常改变你的密码将同步你的密码哈希值。这降低了它被黑客破译的风险。
总结
在本教程中,我们已经学会了。
- 密码散列。
- 不同的散列算法。
- 密码散列机制。
- 在计算机上存储散列的密码。
- 密码保护。