我正在尝试异或文件(编码_数据.bin)使用密钥流(键.bin)并不断得到一个错误“数组索引超出范围”。密钥文件比数据文件长。感谢任何帮助。我对python还是个新手-如果还不明显的话。在
import array
k=open("key.bin", "rb")
s=open("encoded_data.bin", "rb")
t=k.read()
r=s.read()
a1 = array.array('B', (t))
a2 = array.array('B', (r))
for i in range(len(a1)):
a1[i] ^= a2[i]
print a1.tostring()
k.close
s.close
实际上,您可以使用内置的
zip
函数。它允许您一次循环两个iterable,这适合您的情况。在如果密文中有多余的字节,它们将被消除。如果密钥中有额外的字节,则不会使用它们。在
我认为你是在实施一次性垫款。我建议您在此处使用^{}s :
^{pr2}$发生这种情况是因为密钥文件较长,如您所说,并且您正在针对密钥文件中的每个字节循环:
一旦
i
等于len(a2)
,当您试图获取a2[i]
时,您将得到这个异常,因为i
超出了数组的边界。在根据您的问题,不清楚正确的解决方案是什么,但如果您知道数据总是小于键,请使用数据的长度来代替:
^{pr2}$如果您的目标是在数据大于键的情况下重复键,那么解决方案将涉及更多内容。在
这样的解决方案在您的情况下是有效的,如果您的数据长于您的密钥(当然,这是一个重要的密码不!)公司名称:
它采用可调整的异或值,如下所示:
^{pr2}$您可以很容易地使用
array
将其应用于字符串,就像您在示例中所做的那样。在相关问题 更多 >
编程相关推荐