FreedomLy's blog.

【每周一坑】程序员的浪漫

字数统计: 472阅读时长: 1 min
2017/04/27 Share

wordcloud

关注了Crossin的编程教室,每周会出一个Python的小题目,本周的题目是关于hashlib和base64加密模块的。

问题如下:

在python中有hashlib和base64两大加密模块,将一串字符串先经过hashlib.md5加密,然后再经过base64加密,最后得到一串字符:

‘NDRiMWZmMmVjZTk5MTFjMWI1MDNkYTY0MzZlYTAzMTA=\n’

在此给出4个选项

  1. 我们在一起吧
  2. 我选择原谅你
  3. 别说话,吻我
  4. 多喝热水

使用科学的方法算出说的是什么。

思路

其实思路也挺简单,hashlib里有MD5模块,只需调用

hashlib.md5(“要生成MD5的字符串”)

即可生成。

而我们已经知道了经过MD5加密和base64加密后的字符串,可以通过base64的解码函数:

base64.b64decode(“已知的字符串”)

即可得到解码后的内容。

最后只要将hashlib.md5()的内容和base64.b64decode()的内容进行比较,如果相同就输出生成改md5的字符串即可。

Python实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import base64, hashlib      # 引入需要使用的库

answer = 'NDRiMWZmMmVjZTk5MTFjMWI1MDNkYTY0MzZlYTAzMTA=\n' # 问题中的字符串
checkStr = {'我们在一起吧', '我选择原谅你', '别说话,吻我', '多喝热水'} # 将选项存入字典,后面使用

def main():
for x in checkStr: # 遍历字典中的个字符串
md5 = hashlib.md5(x.encode('utf-8')) # 使用hashlib.md5()进行编码
md5_byte = bytes(md5.hexdigest().encode('utf-8')) # base64.decode()得到的是bytes类型的,
# 无法直接与string比较,这里把string类型的md5转换成bytes类型的
b64_byte = base64.decode(answer)
if md5_byte == b64_byte:
print('The answer is', x)


if __name__ == '__main__':
main()

输出结果

万!万!没!想!到! 结果居然是….

多喝热水

说好的程序员的浪漫呢!!要是女朋友千辛万苦解出来看到是这句话,估计会被打死吧…

然而…

和我并没有什么关系QAQ,谁叫我没有女朋友╮(╯▽╰)╭

End~


[1]: 图片出处: http://mp.weixin.qq.com/s/L2DEcnUTb5IFOC8miOO9UA

CATALOG
  1. 1. 思路
  2. 2. Python实现
  3. 3. 输出结果