2016-11-20 82 views
0

出于某种原因,我在尝试运行SDES的Sage实施时遇到错误。我没有对源代码进行任何更改。我确实添加了这个来加密明文。 Y = SDESEncrypt("10111101", "1010000010")。我得到一个错误,这个函数:Sage SDES值错误

def XorBlock(block1, block2): 
    r""" 
    Xors two blocks together. 
    """ 
    l = len(block1); 
    if (l != len(block2)): 
     raise ValueError, "XorBlock arguments must be same length" 
    return [(block1[j]+block2[j]) % 2 for j in xrange(l)]; 

的错误是:TypeError: not all arguments converted during string formatting

我真的不清楚为什么我得到这个错误。我从Stallings Sage示例附录中检索了源代码。它可以在这里找到:http://faculty.mu.edu.sa/public/uploads/1360993259.0858Cryptography%20and%20Network%20Security%20Principles%20and%20Practice,%205th%20Edition.pdf它从第689页开始。

+0

[XOR两个块在Python中可能重复](http://stackoverflow.com/questions/19489283/xor-two-blocks-in-python) –

回答

0

该错误消息表示某个东西在不期望的情况下正在获取字符串。 SDESEncrypt开始

def SDESEncrypt(plaintext_block, K): 
    r""" 
    Performs a single SDES plaintext block encryption. 
    (Given plaintext and key as bit lists.) 
    """ 

你没有传递位列表,你传递字符串。虽然我不知道这些功能或任何他们应该如何工作,这是很容易把你的字符串成位名单,并得到一个结果:

sage: Integer("10111101",2).bits() 
[1, 0, 1, 1, 1, 1, 0, 1] 
sage: SDESEncrypt(Integer("10111101",2).bits(),Integer("1010000010",2).bits()) 
[0, 0, 1, 0, 1, 1, 1, 0] 

假设我正确复制的代码。我可能没有这样做,所以不要相信结果,但我很确定这是你要传递一个0和1的列表,而不是一个字符串。