我有一个包含下面给出的值的列表:
PC1=list();
PC1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4]
好的。现在,我有一个字符串,我输入" bitsequence" (好吧,它的一系列字符1和0 ......)来:
print ("The main key entered is: " + KEY)
#test key that I enter: 0001001100110100010101110111100110011011101111001101111111110001
Yepp,这是DES首次准备创建16个子项时的第一步,我试图在这里实现。因此,当使用PC1列表中的项目时,我认为应该选择KEY字符串中的相应字符,我按照以下方式迭代:
KEY_PERM = list();
i=0
for i in range(0,56):
print ("index", i, "PC1 ", PC1[i], "value from KEY ", KEY[PC1[i]])
KEY_PERM.insert(i, KEY[PC1[i]])
mm,此时根据PC1索引填充的KEY_PERM列表应为:11110000110011001010101011110101010101100110011110001111
但......不是,它给了我清单:
['1', '1', '0', '0', '1', '1', '0', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '1', '0', '0', '1', '1', '0', '1', '0', '0', '0']
这是不正确的,例如,KEY字符串中的字符41和33不是0 ....但是1! 11110000110011001010101011110101010101100110011110001111而不是,现在,0和0作为返回的字符。
请帮帮我! Yepp,我是Python的初学者,但想学习。我想字符串中的初始零可能会被错误处理?或者由于我没有正确循环,或其他东西......像错误的类型等,索引运行疯狂。我现在不。
答案 0 :(得分:1)
我觉得你很困惑33的意思。如果不在编程环境中,那么您将查看列表中的第33个条目,在您的情况下为1。
在Python和许多其他语言中,数组和列表都是索引的,从0开始。所以列表中的第一个条目有索引0.所以当你告诉python key [33]它实际上查找第34个输入您的清单。这是脚本也输出的0。你想要的是列表中的第33个条目。其索引 33-1 = 32 。所以你需要这样做:
for i in range(0,56):
print ("index", i, "PC1 ", PC1[i], "value from KEY ", KEY[PC1[i]-1])
KEY_PERM.insert(i, KEY[PC1[i]-1])
print(''.join(KEY_PERM))
>>> '11110000110011001010101011110101010101100110011110001111'
使用PC1[i]-1
中的条目访问PC1[i]
时注意KEY
完成测试脚本:
PC1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4]
KEY='0001001100110100010101110111100110011011101111001101111111110001'
KEY_PERM=[]
for i in range(0,56):
KEY_PERM.insert(i, KEY[PC1[i]-1])
print(''.join(KEY_PERM))
打印:11110000110011001010101011110101010101100110011110001111