我正在用python创建一个简单的S-Box,它包含所有可能的3位组合作为密钥,并包含其加密组合作为其值。
基本上它将从用户那里获得3位,然后对我定义的S-Box表运行它,然后找到与用户输入位匹配的密钥并输出其加密值。
下面的示例代码,而不是完整的代码;
SBox= { "000": "110","001": "010","010":"000","011": "100" }
inputBits= input("Enter 3 bit pattern: ")
if inputBits == "000":
print("Encrypted combo: ", SBox["000"])
输出:
Enter 3 bit pattern: 000
Encrypted combo: 110
我希望能够更有效地执行此操作,即:不必为每个可能的组合都提供if,类似于将输入字符串与二进位键相匹配的东西。
感谢您的帮助!
答案 0 :(得分:5)
使用dict.get
例如:
SBox= { "000": "110","001": "010","010":"000","011": "100" }
inputBits= input("Enter 3 bit pattern: ")
if SBox.get(inputBits):
print("Encrypted combo: ", SBox.get(inputBits))
#OR print("Encrypted combo: ", SBox.get(inputBits, "N\A"))
答案 1 :(得分:2)
try .. except
在这种情况下很有帮助
SBox= { "000": "110","001": "010","010":"000","011": "100" }
inputBits= input("Enter 3 bit pattern: ")
try:
if SBox[inputBits]:
print("Encrypted combo: ", SBox["000"])
except KeyError:
print("wrong bit pattern")
答案 2 :(得分:1)
dict.get()
方法具有默认参数,并且可以用作后备选项。
如果用户传递的键在词典中可用,则返回相应的值。如果它们的键不存在,则返回dict.get()
方法的默认参数。
SBox= { "000": "110","001": "010","010":"000","011": "100" }
input_bits = input("Enter the 3 bit pattern: ")
print(SBox.get(input_bits, "Invalid 3 bit pattern."))
答案 3 :(得分:0)
SBox= { "000": "110","001": "010","010":"000","011": "100" }
inputBits=input("Enter 3 bit pattern: ")
if inputBits in SBox:
print("Encrypted combo: {}".format(SBox.get(inputBits)))
else:
print("Invalid 3 bit pattern entered")