前言
Bash Shell 中内置了大量功能强大的命令,有时通过一个命令就能实现一个软件的功能。
今天让我们一起学习下在shell中如何校验文件的完整性,以及如何进行文件的加密解密
关键词
md5sum
, sha1sum
, crypt
, gpg
, base64
, openssl
文件校验
由于网络的复杂性,很多原因会导致文件在网络传输过程中完整性被破坏,比如丢包,黑客的恶意篡改等情况。作为接收方,为了保证接收的文件是安全可用的,校验文件的完整性就显得十分必要。 md5sum
和 sha1sum
可以帮助我们完全文件完整性校验
md5sum
# 新建一个文件
echo "This is a file create by backendsite" > file
# 文件内容如下
cat file
This is a file create by backendsite
# 计算文件的md5
md5sum file
c5d43a6371674b99e1825b01edb964ef file
# 改变文件内容,重新计算md5可以看到md5值会发生变化
echo " content changed" >> file
cat file
This is a file create by backendsite
content changed
# 重新计算文件的md5,可以看到md5值发生了变化
md5sum file
c6425ca5a686a907e0210e45849990aa file
#通常情况下,大家会把md5的计算结果放到后缀为md5的文件中,并和源文件一起发布,以便接收方自己校验文件的完整性
md5sum file > file.md5
# file.md5 文件内容如下
cat file.md5
c6425ca5a686a907e0210e45849990aa file
# 我们可以把多个文件的md5值放在同一个.md5文件中
echo "This is file1" >file1
echo "This is file2" > file2
md5sum file1 file2 >>file.md5
#此时file.md5内容如下:
cat file.md5
c6425ca5a686a907e0210e45849990aa file
b5fc751f836c5430b617bf90a8c4725d file1
2436844e3b8a438dea8f8ec76ad3325a file2
#接收方接收到file, file1,file2和file.md5后,放在同一目录下,就可以通过-c参数进行校验文件
md5sum -c file.md5
#如果文件是完整的会输出ok
file: OK
file1: OK
file2: OK
# 现在尝试更改下文件file,然后重新执行校验
echo "context changed again" >>file
md5sum -c file.md5
# 可以看到file的文件完整性被破坏,校验结果为FAILED
file: FAILED
file1: OK
file2: OK
md5sum: WARNING: 1 computed checksum did NOT match
sha1sum
sha1sum是一个和md5sum类似的命令,不同的地方是md5sum使用md5算法生产一个32位的十六进制(128bits)md5值,sha1sum使用sha-1算法生产一个40位的十六进制值(160bits),其用法和md5sum一样
# 计算文件sha1值
sha1sum file
0894413053b78cd427e9b490f5396d12f9cd16a2 file
# 计算多个文件的sha1值并输出到.sha1文件中
sha1sum file file1 file2 > file.sha1
cat file.sha1
0894413053b78cd427e9b490f5396d12f9cd16a2 file
1418e16c9b2a1c032385d55d3daaa38e5cd68d0e file1
ba3119e06e541ce70611ee483a3bb2d39f57dac2 file2
# 校验文件的sha1值
sha1sum -c file.sha1
file: OK
file1: OK
file2: OK
md5sum
,sha1sum
是两个非常方便实用的校验完整性的命令,使用起来十分方方便。
文件的加密解密
某些情况下为了避免非目标人群直接看到原文,需要对文件进行加密,使得只有拥有密码的目标人群才能看到文件内容。
crypt
, gpg
, base64
, openssl
,就是linux内置的方便好用的加密解密命令。
crypt
# 加密
crypt PassPhrase <file >encrypted_file
Unix crypt(1) emulation program using mcrypt(1).
Use crypt -h for more help.
Warning: It is insecure to specify keywords in the command line
Stdin was encrypted.
# 解密用 -d 输入为加密后的数据,输出到stdout
crypt PassPhrase -d <encrypted_file >output_file
cat output_file
Unix crypt(1) emulation program using mcrypt(1).
Use crypt -h for more help.
Warning: It is insecure to specify keywords in the command line
Stdin was encrypted.
This is a file create by backendsite
content changed
context changed again
gpg
gpg是一个签名和加密工具
gpg加密
gpg -c file #交互式输入密码后,会生成一个file.gpg文件
gpg file.gpg #交互式输入密码后解密
gpg -gen-key # 交互式输入name, email后生产一个key, 可以用来签名
gpg -s file # 签名
gpg -verify file.gpg #验证签名
base64
base64 用来把ascii格式的字符串转化成radix-64的编码
#base64 加密
base64 file
VGhpcyBpcyBhIGZpbGUgY3JlYXRlIGJ5IGJhY2tlbmRzaXRlCiBjb250ZW50IGNoYW5nZWQKY29u
dGV4dCBjaGFuZ2VkIGFnYWluCg==
# 重定向到文件中
base64 file >encoded_base64_file
cat encoded_base64_file
VGhpcyBpcyBhIGZpbGUgY3JlYXRlIGJ5IGJhY2tlbmRzaXRlCiBjb250ZW50IGNoYW5nZWQKY29u
dGV4dCBjaGFuZ2VkIGFnYWluCg==
# base64解密
base64 -d encoded_base64_file > decoded_base64_file
cat decoded_base64_file
This is a file create by backendsite
content changed
context changed again
base64 是可逆加密算法
openssl
openssl 是一个非常强大的命令,可以用来创建公钥,私钥,创建X.509证书,SSL/TLS服务器的测试等
这里仅介绍利用openssl 生成哈希加盐密码
# 我们知道linux中用户密码是被加密存储的,存在/etc/shadow下面,其形式是一种哈希加盐算法生成的密码
# 生成哈希加盐密码
openssl passwd -1 -salt "salt_string" "your_password" #这里是1,2的1 不是l,指采用基于md5的bsd算法1
$1$salt_str$VPuDWl0a9mTDQA75rphB.1
openssl passwd -5 -salt "salt_string" "your_password" # -5 指使用基于sha256/512算法
$5$salt_string$rUw2F5jWCc0xnYtxBUnqGeZ4Cyq92RdU0GYLz1wNrtC
Comments are closed.