使用stings列表进行python加密和解密

时间:2018-03-05 18:08:47

标签: python python-3.x list encryption

我正在编写一个代码,用于加密用户输入的String列表。这些列表将被加密,然后将被解密。 但是一旦它到达加密部分就会给我这个错误。

  
    

回溯(最近一次呼叫最后一次):文件" C:/Users/dana/Desktop/q2.py" ;,第16行,在         x = ord(c)TypeError:ord()需要一个字符,但是找到长度为4的字符串

  

我确信即使在解密部分也会出现同样的错误。

这是我的代码:

    # Encryption
list1=[]
list2=[]
i = 0
while not(False):
    plain_text = input ("Enter any string ")
    if (plain_text !='q'):
        list1.append(plain_text)
        i=i+1
    else:
        break



encrypted_text = ""
for c in list1:
    x = ord(c)
    x = x + 1
    c2 = chr(x)
    encrypted_text = encrypted_text + c2
print(encrypted_text)

#Decryption
encrypted_text = "Uijt!jt!b!uftu/!BCD!bcd"

plain_text = ""
for c in encrypted_text:
    x = ord(c)
    x = x - 1
    c2 = chr(x)
    plain_text = plain_text + c2
print(plain_text)
list2=[encrypted_text]
print(plain_text)
print("the original msgs are :" , list1)
print("the encrypted msgs are :" ,list2)

2 个答案:

答案 0 :(得分:2)

list1包含用户为响应input提示而输入的任何字符串。

然后你的第一个for循环遍历list1c采用list1元素的值。然后在ord上使用c。我希望您的意图是在ord的元素上使用c。尝试在某处添加一个额外的循环。

另外,请考虑将代码组织到函数中。

答案 1 :(得分:1)

ord()采用单个字符

select m.*, p.type 
from multipliers m inner join pushes p on m.push_id = p.id
where m.push_id = 
(
    select max(m2.push_id)
    from multipliers m2 inner join pushes p2 on m2.push_id = p2.id
    where p2.type = 'CONSTANT'
)

但是上面的循环返回字符串为C,这就是你得到错误的原因 更正代码

for c in list1:
 x = ord(c)