shell编程----md5sum命令和Linux系统产生随机数的方法


1. md5sum

  在网络传输,设备只见转存,复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的,
  md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是对文件的内容校验,而不是文件名。文件内容相同,其md5值相同。
  md5值是一个128位的二进制数据,转换16进制则时32(128/4)位的进制值。
  md5校验,有很小概率不同的文件生成md5可能相同,比md5更安全的校验算法还有SHA*系列。
  在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

[root@localhost md5sum]# date>date
[root@localhost md5sum]# ls
date
[root@localhost md5sum]# md5sum date
d13a517ea124b71e94da80bd5d28c552  date
[root@localhost md5sum]# md5sum date|cut -d " " -f1
d13a517ea124b71e94da80bd5d28c552
[root@localhost md5sum]# cp date date1
[root@localhost md5sum]# cp date date2
[root@localhost md5sum]# cp date date3
[root@localhost md5sum]# ls
date  date1  date2  date3
[root@localhost md5sum]# md5sum *
d13a517ea124b71e94da80bd5d28c552  date
d13a517ea124b71e94da80bd5d28c552  date1
d13a517ea124b71e94da80bd5d28c552  date2
d13a517ea124b71e94da80bd5d28c552  date3
[root@localhost md5sum]# md5sum -b *date1
d13a517ea124b71e94da80bd5d28c552 *date1
[root@localhost md5sum]# md5sum date1
d13a517ea124b71e94da80bd5d28c552  date1
[root@localhost md5sum]# md5sum date
d13a517ea124b71e94da80bd5d28c552  date

将生成的md5sum放到d.md5文件中

[root@localhost md5sum]# md5sum * > d.md5
[root@localhost md5sum]# ls
date  date1  date2  date3  date.md5  d.md5
[root@localhost md5sum]# cat d.md5 
d13a517ea124b71e94da80bd5d28c552  date
d13a517ea124b71e94da80bd5d28c552  date1
d13a517ea124b71e94da80bd5d28c552  date2
d13a517ea124b71e94da80bd5d28c552  date3
166c75b8d796180611c9d3d5ecc9d858  date.md5

追加文件

[root@localhost md5sum]# md5sum date4>>d.md5
[root@localhost md5sum]# cat d.md5 
d13a517ea124b71e94da80bd5d28c552  date
d13a517ea124b71e94da80bd5d28c552  date1
d13a517ea124b71e94da80bd5d28c552  date2
d13a517ea124b71e94da80bd5d28c552  date3
166c75b8d796180611c9d3d5ecc9d858  date.md5
d13a517ea124b71e94da80bd5d28c552  date4

重要的选项
-b 以二进制模式读入文件内容
-t 以文本模式读入文加内容
-c 根据已生成的md5值,对现存文件进香校验
–status 校验完成后,不生成错误或正确的题是信息,可以通过命令的返回值来判断

校验内容

md5sum -c d.md5

md5校验:-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行比较,如果一致,则返回OK,否则返回错误信息

[root@localhost md5sum]# cat date
Sat Feb 15 10:00:45 EST 2020
[root@localhost md5sum]# date >> date
[root@localhost md5sum]# cat date
Sat Feb 15 10:00:45 EST 2020
Sat Feb 15 10:13:41 EST 2020
[root@localhost md5sum]# md5sum -c d.md5 
date: FAILED
date1: OK
date2: OK
date3: OK
date.md5: OK
date4: OK
md5sum: WARNING: 1 computed checksum did NOT match
# 加上--status没有输出,通过echo $?查看是否有不匹配情况
[root@localhost md5sum]# md5sum -c --status d.md5 
[root@localhost md5sum]# echo $?
1

2. Linux系统产生随机数的方法

  1. 通过系统环境变量($RANDOM)实现
      RANDOM的随机数范围为0~32767,因此,加密行布施很好,可以通过在输出的随机数后面增加加密字符串(就是和密码生成有关的一个字符串)的方法解决,最后再一起执行md5sum操作并截取结果的后n位,这样一来,就无法根据随机数范围0~32767来猜出具体结果了。
[root@localhost md5sum]# echo $RANDOM
11962

[root@localhost md5sum]# echo "zjyljl$RANDOM"|md5sum |cut -d " " -f1
68e97b5e6cd59a32b91d0f42b37f0dfc
  1. 通过openssl产生随机数
    令数字与大小写结合,并且带上特殊字符,可以达到很长的位数,这样的随机数很安全。
[root@localhost md5sum]# openssl rand -base64 10  #10byte
LvI6LxeoYt+MFQ==
  1. 通过date获取随机数
[root@localhost md5sum]# date +%s
1581780775
[root@localhost md5sum]# date +%s%N
1581780782938236310

3. shell脚本随机数实战案例

  使用for循环在/westos目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串westos。

[root@localhost md5sum]# cat test.sh 
#!/bin/bash

Path=westos
[ -d "$Path" ]||[ mkdir -p $Path ]
for n in `seq 10`
do
	random=$(openssl rand -base64 40 | sed 's/[^a-z]//g' |cut -c 2-11)
	touch $Path/${random}_westos.html
done

[root@localhost md5sum]# sh test.sh 
[root@localhost md5sum]# cd westos/
[root@localhost westos]# ls
edrnynoebq_westos.html  ioulybqztn_westos.html  xgklufzuht_westos.html
fletgjntbc_westos.html  jsowfnsxap_westos.html  zgilorbpco_westos.html
hgjocwvxdf_westos.html  suxctfbhok_westos.html
hqbvjzgnmb_westos.html  wsazgzhkol_westos.html

  批量创建10个系统帐号(westos01-westos10).并设置密码(密码位随机数,要求时字符和数字混合)

[root@localhost md5sum]# cat test1.sh 
#!/bin/bash
. /etc/init.d/functions
user="westos"
passfile="user.log"
for num in `seq -w 10`
do
	pass="`echo $RANDOM|md5sum|cut -c 3-11`"
	useradd $user$num &>/dev/null && {
		echo "$pass"|passwd --stdin $user$num &>/dev/null
		echo -e "user:$user$num\tpasswd:$pass">>$passfile
	}

if [ $? -eq 0 ];then
	action "$user$num is ok" /bin/true
else
	action "$user$num is fail" /bin/false
fi
done
echo ----------------------------
cat $passfile && >$passfile   # 会清空$passfile文件

[root@localhost md5sum]# sh test1.sh 
westos01 is ok                                             [  OK  ]
westos02 is ok                                             [  OK  ]
westos03 is ok                                             [  OK  ]
westos04 is ok                                             [  OK  ]
westos05 is ok                                             [  OK  ]
westos06 is ok                                             [  OK  ]
westos07 is ok                                             [  OK  ]
westos08 is ok                                             [  OK  ]
westos09 is ok                                             [  OK  ]
westos10 is ok                                             [  OK  ]
----------------------------
user:westos01	passwd:a27cebe64
user:westos02	passwd:a248a7114
user:westos03	passwd:40fce12bc
user:westos04	passwd:da7940f62
user:westos05	passwd:1e24d1297
user:westos06	passwd:62de26b22
user:westos07	passwd:097739355
user:westos08	passwd:45ab544c9
user:westos09	passwd:2aa2ccf5d
user:westos10	passwd:362eace97

注意:对于给一个数字加0有多种实现方法,这里给出两种方法:seq -w 10;echo {01…10}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值