为什么我的python代码不工作?

时间:2017-05-16 16:44:59

标签: python

此代码有什么问题?它没有给出输出而是给出错误 - “IndexError:string index out of range”

import hashlib 
import struct
import re as sbc
xorer=[117, 5, 36, 94, 6, 23, 113, 44, 71, 105, 6, 125, 1, 6, 90, 31, 54, 57, 117, 118, 2, 123, 61, 112, 1, 74, 106, 98, 69, 2, 12, 93]

md5_final="8a0e2e33fc0ef5f4d1b9243139a2aa4f"

flag=''
for i in range(32):
   flag+=str(chr(ord(md5_final[i])^xorer[i]))

print "answer{"+flag+"}"
exit() 

3 个答案:

答案 0 :(得分:3)

由于在IndexError为7时md5_final[i]访问权限,您的代码因i而失败。因为len(md5_final) == 7md5_final[6]是您可以访问的最后一个索引

我的盲目猜测是,要“修复”您的代码,您需要将range(32)替换为range(len(md5_final))。然后你会打印answer{8pC9jr}。也就是说,你的“Muggles”字符串,按字节顺序与xorer值进行异或运算。我想,在一个真实的例子中,你有32个字符的字符串 - 例如“8a0e2e33fc0ef5f4d1b9243139a2aa4f”而不是“Muggles”,所以range(32)会起作用。

同样,如果i >= len(xorer),您的代码将会中断。典型的解决方案是xorer[i % len(xorer)]range(min(len(md5_final), len(xorer))),具体取决于您要实施的内容。或者声明两个len(md5_final) == len(xorer),并在不是这种情况下引发异常。

然而,这只是一个盲目的猜测。请考虑解释您在那里做了什么 - 您的输入是什么,您正在实施什么算法以及您希望实现什么。

另外,以防万一...请注意,简单的XOR密码和MD5哈希函数可能严重不足以实现真实的安全性。因此,如果这不是一个学习项目,而是可能具有实际应用的东西 - 最好与某人就你正在做的事情进行协商。

答案 1 :(得分:0)

您的md5_final字符串只有7个字符,但您的for循环正在使用i = 0..31进行迭代。

当您md5_final[i]>时访问i时,这会导致问题6。

你可能想要这样的东西:

for i in range(len(md5_final)):
    flag += str(chr(ord(md5_final[i]) ^ xorer[i]))

输出类似于:answer{8pC9jr}

答案 2 :(得分:0)

在您的代码中,您尝试从0循环到32,其中md5_final字符串仅包含7个字符。您无法访问md5_final[7]。试试这个:

for i in range(len(md5_final)):