在Python中实现DES,无法理解部分代码

时间:2017-11-14 17:08:17

标签: python encoding

我正在学习如何在Python中编写DES加密代码。我在Github上遇到了这段代码(链接:https://github.com/RobinDavid/pydes/blob/master/pydes.py),但我无法理解代码的一部分。 (参见Github代码中的第123行,也在下面给出:)

def binvalue(val, bitsize): #Return the binary value as a string of the given size
    binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:]   # this is line 124 I'm not getting
    if len(binval) > bitsize:
        raise "binary value larger than the expected size"
    while len(binval) < bitsize:
        binval = "0"+binval #Add as many 0 as needed to get the wanted size
return binval

我理解该函数的作用(如所写:#Return二进制值为给定大小的字符串)但我不明白它是如何做到的,我不理解第124行。谢谢回答。

1 个答案:

答案 0 :(得分:2)

binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:]

这一行是一个三元表达式,如果val是整数,则返回val的二进制值,否则它会在val的ASCII码上执行相同的操作。

这是(与其他人一样)与Python 2和Python 3兼容的一种方式。

在Python 3中,val是一个整数,作为bytes数据的一部分,当val是1个大小的字符串作为str数据的一部分时在Python 2中,二元和二元没有区别。字符串。

简而言之,这是一种将字节/字符转换为字符串的二进制表示的便携方式。

请注意,作者可以从

了解更多关于python的知识
while len(binval) < bitsize:
        binval = "0"+binval

可以替换为binval = binval.zfill(bitsize)