shell md5sum命令和Linux系统产生随机数

Linux命令之md5sum

在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不- -致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。

md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同

md5值是一个128位的二进制数据,转换成16进制则是32( 128/4 )位的进制值

md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的

在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输
在这里插入图片描述

md5重要的选项

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

在这里插入图片描述

md5校验

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

md5sum -C d.md5

在这里插入图片描述

Linux系统产生随机数的方法

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

在这里插入图片描述

2.通过openssl产生随机数
令数字与大小写相结合,并且带.上特殊字符,可以达到很长的位数,这样的随机数很安全

[root@localhost md5sum]# openssl rand -base64 10  #10byte
LvI6LxeoYt+MFQ==

3.通过date获取随机数
在这里插入图片描述

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}

发布了107 篇原创文章 · 获赞 0 · 访问量 1452

猜你喜欢

转载自blog.csdn.net/weixin_45029822/article/details/104364596