什么鬼
假如,你需要向一个 ftp 服务器上传压缩文件,你需要一个简单的方法
让使用这个文件的人直到你的文件在传输的过程中没有丢失数据。
聪明的你可能想到了,md5 这个神奇东东,给 md5 一个字符串,他会还你
你个字符串,还还不是简单的还,是根据 md5 的算法,md5 算法是这样的:
无论你给它一个什么样的字符串,它都会为你返回一个 32 位(可以设置 16 或者其他)的字符串,而且同样的输入会得到同样的输出
话题转到 ftp 文件校验的问题上来。根据上面的原理,我们可以把一个文件当做是一个字符串,输入给 md5
这个函数,获得一个 32 位定长的字符(就叫他 md5 值 A )。当你传文件的时候,可以把在
你这边生成的 md5 值传到 ftp 上,使用文件的人,就可以根据相同的算法,算出文件的 md5 值(B),
A 和 B 如果相同,证明在网络传输的过程中,没有丢失数据,反之,异然。
在 Linux 的时间里这个命令叫md5sum
,下面是man md5sum
的结果:
MD5SUM(1) User Commands MD5SUM(1)
NAME
md5sum - compute and check MD5 message digest
SYNOPSIS
md5sum [OPTION]... [FILE]...
DESCRIPTION
Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard input.
-b, --binary
read in binary mode
-c, --check
read MD5 sums from the FILEs and check them
--tag create a BSD-style checksum
-t, --text
read in text mode (default)
Note: There is no difference between binary and text mode option on GNU system.
一般来说,使用md5sum file > file.md5sum
来对文件 md5 加密,然后把加密后的结果重定向到 file.md5sum 里面
md5sum --status -c file.md5sum
对 文件 file 进行检查
--status
会将结果放到$?
里面的,后面可以使用[ "$?" == "0" ]
判断是合格。
例子:
# file 上传 ftp
md5sum file > file.md5sum
# put file and file.md5sum to ftp
# ftp check file
md5sum -status -c file.md5sum
if [ "$?" == "0" ]; then
# file is ok and file is completed and you can handler the data of file
fi