面试题18:破解RANDOM随机数案例
已知下面的字符串是通过RANDOM随机数变量md5sum后,再截取一部分连续字符串的结果,请破解这些字符串对应的使用md5sum处理前的RANDOM对应的数字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
[root@jenkins scripts]# cat aa.txt
21029299
00205d1c
a3da1677
1f6d12dd
890684b
[root@jenkins scripts]# cat rd_mat.sh #!/bin/bash ############################################################## # File Name: rd_mat.sh # Version: V1.0 # Author: gaobo # Organization: 641627690@qq.com # Created Time : 2017-12-07 19:57:59 # Description: ############################################################## for ((i=0;i<=32767;i++)) do for j in `cat /server/scripts/aa.txt` do #echo "$(echo $i|md5sum|cut -c 1-8) ${j}" if [ "$(echo $i|md5sum|cut -c 1-8)" == "${j}" ] then echo $i fi done done
[root@jenkins scripts]# sh rd_mat.sh
1346
7041
25345
25667
方法二:
[root@jenkins scripts]# cat rd_mat.sh #!/bin/bash ############################################################## # File Name: rd_mat.sh # Version: V1.0 # Author: gaobo # Organization: 641627690@qq.com # Created Time : 2017-12-07 19:57:59 # Description: ############################################################## for ((i=0;i<=32767;i++)) do for j in `cat /server/scripts/aa.txt` do if [[ "$(echo $i|md5sum)" =~ "${j}" ]] then echo $i fi done done
现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含“baidu”字符串 以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault。 方法一:利用grep查找 strA="long string" strB="string" result=$(echo $strA | grep "${strB}") if [[ "$result" != "" ]] then echo "包含" else echo "不包含" fi 先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果 如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。 这个方法充分利用了grep 的特性,最为简洁。 方法二:利用字符串运算符 strA="helloworld" strB="low" if [[ $strA =~ $strB ]] then echo "包含" else echo "不包含" fi 利用字符串运算符 =~ 直接判断strA是否包含strB。(这不是比第一个方法还要简洁吗!) 方法三:利用通配符 A="helloworld" B="low" if [[ $A == *$B* ]] then echo "包含" else echo "不包含" fi 这个也很easy,用通配符*号代理strA中非strB的部分,如果结果相等说明包含,反之不包含。 方法四:利用case in 语句 thisString="1 2 3 4 5" # 源字符串 searchString="1 2" # 搜索字符串 case $thisString in *"$searchString"*) echo Enemy Spot ;; *) echo nope ;; esa 这个就比较复杂了,case in 我还没有接触到,不过既然有比较简单的方法何必如此 方法五:利用替换 STRING_A=$1 STRING_B=$2 if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]] then ## is not substring. echo N return 0 else ## is substring. echo Y return 1 fi 这个也挺复杂