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