如何使用python破解有密码问题的例子,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联公司是专业的厦门网站建设公司,厦门接单;提供网站设计制作、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行厦门网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
这是pythonchallenge上的第二关,比较简单。
题目给了下面这个HINT:
以及一串看起来很乱的字母:
g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyr
q ufyr amknsrcpq ypcdmp. bmgle gr gl zw fyl
b gq glcddgagclr ylb rfyr'q ufw rfgq rcvr g
q qm jmle. sqgle qrpgle.kyicrpylq() gq pcam
kkclbcb. lmu ynnjw ml rfc spj.
根据图片里的规律,我们得知其是字母向右移动两位。那么原文也就是ASCII码减二的加密方式。这就是凯撒密码。
你如果有耐心的话,可以一个一个的往右移两个字母,从而得出答案。但我们应该更追求更高效的方法。
Python中有这样的两个函数:
ord():返回一个字符的ASCII码
chr():获取一个ASCII码,将它转换为字符
我们或许可以利用这两个函数解密。
核心代码:
for each in text:
if ord(each) >= ord('a') and ord(each) <= ord('z'):
answer = answer + chr(ord(each) + 2)
代码意思是这样的:检测字符串内的每一个字符,若它是小写字母(介于a和z之间)那么就将它的ASCII码加二并转化为字符。
因为文中只有小写字母,所以我们只需要考虑小学的,若有大写字母,你只需要添加多两个and并列进 if 即可。
我们查看转换的结果:
并不是很理想,有些字符,如本应该是a的变成了{ , b变成了I. 这是为什么?
我们观察原文发现 'a' 的原文是 'y' , 'b' 的原文是 'z'. 这样我们就明白了,ASCII码后面的那几个小写字符+2后识别成了其他字符。实际上当他们+2超过26的时候,就应该从1的a开始。这个问题怎么解决呢?
你可以单独在if内设置条件,比如
if(ord(each) == 25)
answer = answer + 'a'
但是这样不利于普遍化,到时候如果它不是向右移动两位,而是十位的时候该怎么办?
解决办法是,先将该字符按照我们先前的办法转换,然后取模26,这样的话低于等于26的不会变,本来是27的会变成1,这样就能成功表示转换后的a和b. 最后再加上a的ASCII(为了得到其他字符的ASCII码,便于转换成字符),最后转换成字符。
完整代码如下:
text = """
g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyr
q ufyr amknsrcpq ypcdmp. bmgle gr gl zw fyl
b gq glcddgagclr ylb rfyr'q ufw rfgq rcvr g
q qm jmle. sqgle qrpgle.kyicrpylq() gq pcam
kkclbcb. lmu ynnjw ml rfc spj.
"""
answer = ""
for each in text:
if ord(each) >= ord('a') and ord(each) <= ord('z'):
answer = answer + chr((ord(each) + 2 - ord('a')) % 26 + ord('a'))
else:
answer = answer + each
print(answer)
关于如何使用python破解有密码问题的例子问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
当前题目:如何使用python破解有密码问题的例子
文章源于:http://scyingshan.cn/article/ipjosc.html