今天让我们冒险进入加密领域,了解 Linux 中的 md5 和 base64 命令。 加密是每个负责保护数据安全的人的主题。 数据泄露可能导致数千甚至数百万的损失。 比金钱更大的损失是信誉的丧失。 加密对您的数据进行编码,以防止未经授权的访问。 在本教程中,我们将介绍一些非常基本的方面,以确保通过 Internet 传输的数据完好无损并且没有人对其进行篡改。
从加密开始
在数据库中存储密码时,最安全的方法是使用单向加密算法(如 MD5)对密码进行加密,使其无法逆转。 当用户输入密码时,密码会再次使用 MD5 加密,然后在后端比较哈希值以验证密码是否相同。
另一方面,Base64 是一种常规的双向加密算法,允许对传递给它的数据进行加密和解密。 如果您想确保安全性,这将不是最佳选择,但如果您最初的想法是以明文形式发送数据,最好使用它。
介绍 Linux 上的 MD5 和 Base64 命令
让我们直接进入并了解 MD5 和 Base64 命令的不同用途。 我们将介绍使用这些命令时可以使用的基本语法和一些用例。
MD5 和 Base64 之间的根本区别
MD5 | Base64 |
是一种单向哈希算法 | 是一种双向加密算法 |
加密后的数据无法解密为原始形式 | 加密后的数据可以解密为其原始形式 |
主要用于在数据库上存储密码/敏感数据以及验证包的完整性 | 用于通过仅接受 ASCII 格式信息的网络传输数据。 |
当您需要传输包含各种字符(如 Unicode)或具有某些网络不接受的格式的文件时,使用 Bas64 对文件进行编码可以传输该文件。 但 Base64 不再像以前那么流行的原因是:
- 由于加密非常弱,用例非常有限
- 我们的数据通过的几乎所有网络和路由器都接受所有基本格式(包括 Unicode)的数据
- 现在有更好的算法
显然,甚至可能有更多的理由投票“支持”base64 的存在,但与目前 MD5 的使用情况相比,base64 无处可见。 但是现在您对算法有了很好的理解,让我们继续讨论它们在 Linux 上的用法
Linux 中的 md5sum 命令
MD5 是 Message-Digest algorithm 5 的缩写,是一种加密散列算法。 它被广泛用作校验和命令来验证文件或字符串的完整性。 为此,它使用 128 位字符串,无论为特定文件生成多少次,该字符串都将保持不变。
使用 MD5 生成的哈希值不可逆,因此无法确定生成特定哈希值的内容。
Linux 上 md5sum 命令的基本语法
md5sum [option] [file]
这将为我们的文件创建一个字母数字哈希,并根据我们的选项显示它。 以下是我们在 Linux 中使用 MD5 命令时可用的一些选项列表。
选项 | 影响 |
-b | 以二进制格式读取文件以创建或打印 MD5 校验和 |
-t | 读取文本格式的文件以创建或打印 MD5 校验和。 这是默认选项 |
-C | 从文件中读取 MD5 并检查它 |
-严格的 | 如果校验和文件格式不正确,则导致非零退出代码 |
-w | 如果校验和文件格式不正确,则警告用户 |
虽然这些是最常用的选项,但您还可以使用 man md5sum 探索其他选项。 现在让我们讨论 Base64 命令。
Linux 中的 base64 命令
现在,base64 不是加密算法,而只是一种编码算法,可以让您在传输文件的同时保持完整性。 (一个有趣的 StackOverflow 问题)
Linux 中 base64 命令的基本语法
base64 [option] [input_file] [output_file]
这需要我们的 input_file,对其进行编码或解码,并根据我们的选项将结果保存在 output_file 中。 以下是我们在 Linux 中的 Base64 命令中使用的五个主要选项。
选项 | 影响 |
-e | 读取输入文件,将其内容编码为 Base64 格式并将其保存到我们的输出文件中 |
-d | 读取输入文件,使用 Base64 格式解码其内容并将其保存到我们的输出文件中 |
-u | 显示有关 Base64 命令使用的信息 |
-一世 | 读取文件进行解码,同时忽略所有非字母字符 |
-n | 默认情况下,Base64 命令在解码时使用错误检查。 此选项告诉命令跳过错误检查 |
在 Linux 中使用 md5sum 和 base64 命令
现在我们了解了 Linux 中的 MD5 和 Base64 命令,是时候使用它们了。
MD5 和 Base64 命令通常用于三个目的 –
- 创建哈希
- 验证哈希
- 检查包签名。
让我们分别看看这些。
使用 md5sum 和 base64 命令创建哈希
要在 Linux 中使用 MD5 和 Base64 命令创建哈希,我们需要使用 MD5 生成哈希,然后使用 Base64 对其进行编码。 对于这个例子,我们将使用文件 TESTFILE.txt 来生成一个哈希
打开终端并键入以下命令。 根据需要替换文件名。
md5sum <filename> base64 <filename>
如您所见,我们已经根据文件中的内容生成了哈希值。 现在您需要记住,生成的哈希基于文件中存在的内容,而不是基于文件名。 如果内容更改,哈希值也会更改,这将有助于接收用户了解文件已被篡改。
让我们使用输出重定向运算符“>”将这些哈希值保存在单个文件中。
验证 MD5 或 Base64 哈希
就像我们为文件创建 Base64 编码的 MD5 哈希一样,这些命令也可用于验证特定文件的哈希。 为此,我们首先使用 Base64 命令对 pass.txt 的内容进行解码,并将解码后的数据保存在 decode.txt 中作为我们的输出文件。
以下屏幕截图显示了这是如何完成的。
base64 -d <hashfile> md5sum -c <hashfile>
这是您在使用 MD5 与 Base64 时会注意到的主要区别。 Base64 直接加密数据,并在通过 Internet 传输时使纯文本文件不可读。 解密后,文件的内容是直接可见的。
与 MD5 相比,它只是验证文件中的数据是否与生成哈希之前的数据相同。 如您所见,它显示“example.txt: OK”,这是确认为 example.txt 生成的哈希与验证文件时生成的哈希匹配的确认。
检查包签名
让我演示如何验证从 Internet 下载的文件的包签名。 现在,您会发现 .md5 文件可以与原始文件一起下载。
由于验证散列的过程将是相同的,因此我将通过以下 3 个步骤来演示我们如何使用 MD5 来验证包签名。
- 显示文件内容并为文件创建MD5和Base64 Hash
- 验证散列和文件的内容是否正确。
- 更改文件的内容并验证文件的哈希值
让我们首先从“example.txt”文件创建哈希。
[email protected]:~# ls example.txt [email protected]:~# cat example.txt Hi this is a test file from LinuxforDevices [email protected]:~# md5sum example.txt > md5sum.md5 [email protected]:~# base64 example.txt > base64.txt [email protected]:~# ls base64.txt example.txt md5sum.md5
验证散列和文件的内容是否正确。
[email protected]:~# cat example.txt Hi this is a test file from LinuxforDevices [email protected]:~# md5sum -c md5sum.md5 example.txt: OK [email protected]:~# base64 -d base64.txt Hi this is a test file from LinuxforDevices
更改文件的内容并再次验证哈希
[email protected]:~# cat >> example.txt NEW LINE [email protected]:~# cat example.txt Hi this is a test file from LinuxforDevices NEW LINE [email protected]:~# md5sum -c md5sum.md5 example.txt: FAILED md5sum: WARNING: 1 computed checksum did NOT match [email protected]:~# base64 -d base64.txt Hi this is a test file from LinuxforDevices
正如您所看到的,这次在我们更改文件内容后,哈希验证失败并给我们一条消息警告校验和不匹配。
但是在 Bas64 的情况下,它并没有真正检查原始文件中的内容是什么。 它只是解密呈现给它的任何 base64 数据。 所以我们得到了我们最初加密的数据。
最后的话…
我们已经在此处介绍了 md5 和 base64 命令的基本用法,但您还可以使用更多。 但要记住的主要指示是这些:”
- MD5 是一种散列算法,md5sum 命令用于通过与通过 Internet 传输之前的散列数据进行比较来验证包的完整性。
- Base64 是一种加密算法(尽管它太弱而无法用于重要的事情)。 它的工作原理是加密呈现给它的数据,然后将加密的文本解密回原始数据。