SHELL学习笔记之随机数的产生


Linux 系统产生随机数的方法

  • 通过系统环境变量($RANDOM)实现


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

  • 校验与核实
  • 校验和(checksum)程序用来从文件中生成校验和密钥,然后利用这个校验和密钥核实文件的完整性,一份文件可以通过网络或任何存储介质分发到不同的地点,出于多种原因,数据可能在传输过程中丢失了若干位,从而导致文件损坏,这种错误通常发生在从 Internet 上下载文件时,或者通过网络传输文件时,或者遭遇 CD 光盘损坏等.因此,我们需要采用一些测试方法来确定接收到的文件是否存在错误,用于文件完整性测试的特定密钥就被称为校验和。我们对原始文件和接收到的文件都进行校验和计算,通过对比两者的校验和,就能够核实接收到的文件是否正确,如果校验和相等,就意味着我们接收到了正确的文件,否则用户就不得不重新发送并再次比对校验和。校验和对于编写备份脚本或系统维护脚本来说非常重要,因为它们都会涉及通过网络传输文件,通过使用校验核实,我们就可以识别出那些在网络传输过程中出现损坏的文件,并重发这些文件,从而确保数据的完整性
  • 最知名且使用最为广泛的校验和技术是 md5sum 和 sha1sum 它们对文件内容使用相应的算法来生成校验和


如上所示,md5sum 是一个 32 个字符的十六进制

将输出的校验和重定向到一个文件,然后用这个 MD5 文件核实数据的完整性

按照下面的方法用生成的文件核实数据的完整性:



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



  • 通过时间(date)获得随机数


  • shell 脚本随机数实战案例(面试经典题)
#!/bin/bash

#破解 RANDOM 随机数
#已知下面的字符串时 RANDOM 随机数变量经过 md5sum 处理后,再截取一部分连续字符串的结果,请破解这些字符串在使用 md5sum处理前所对应的数字
#21029299 00205d1c a3da1677 1f6d12dd 890684b

array=(
  21029299
  00205d1c
  a3da1677
  1f6d12dd
  890684b
)
path=/tmp/md5.txt
Num=0
funGetMd5 () {

    [ -f "$path" ] || touch $path
    rowNum=$(wc -l < $path)
    if [ $rowNum -ne 32768 ];then
    > $Path
    for ((Num=0;Num<=32767;Num++))
    do
       stat=$(echo $Num|md5sum|cut -c 1-8)
       echo "$stat $Num" >> $path
    done
else
return 0
fi
}
funFindMd5() {
   word=$(echo "${array[@]}"| sed -r 's# |\n#|#g') 
                              #取出所有数组元素并用|分隔开 #此处如果不用-r 的话,“|”就得转义
   grep -E "$word" $path      #同时过滤包含所有不同字符串的内容
}
funMain() {
   funGetMd5
   funFindMd5
}
funMain








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值