这个简单的加密和解密程序有什么问题?

时间:2018-12-09 18:35:40

标签: python python-3.x debugging

def enc(a):
    for i in range(len(a)):
        if (i%2==0):
            a[i]=chr(ord(a[i])+3)
        else:
            a[i]=chr(ord(a[i])+5)
    r1 = ''.join(a)
    return r1

def dec(m):
    for i in range(len(m)):
        if (i%2==0):
            m[i]=chr(ord(m[i])-3)
        else:
            m[i]=chr(ord(m[i]+5)
    r2 = ''.join(m)
    return r2
h=input()
print(enc(h))
print(dec(h))

请帮助我解决这个可能愚蠢的错误,我只想输入并加密并解密

1 个答案:

答案 0 :(得分:1)

我很高兴阅读您的代码,因为一段时间前,我尝试自己编写加密和解密。所以我想我知道你要达到的目标。

因此,首先,Python字符串不喜欢赋值。

因此我们将字符串转换为列表

def enc(a):
   a = list(a)

之后,我们会查看您的来电

h=input()
print(enc(h))
print(dec(h))

这些调用只会产生一些“随机”字符串,所以我建议:

h=input()
h= enc(h)
print(h)
print(dec(h))

这将加密字符串,而不是将其打印出来。将其传递给dec方法,并回滚enc中的更改后,打印您输入的字符串。

最后但并非最不重要的一点,我们必须看看您的dec方法:

else:
      m[i]=chr(ord(m[i]+5)

如果在enc中使用+5,则将永远无法找回原始字符串,这在加密和解密中应该是最重要的事情。

因此您必须将其更改为

else:
      m[i]=chr(ord(m[i])-5)

因此,如果您全部更改,则最终代码应如下所示:

def enc(a):
   a = list(a)
   for i in range(len(a)):
      if (i%2==0):
           a[i]=str(chr(ord(a[i])+3))
       else:
           a[i]=str(chr(ord(a[i])+5))
   r1 = ''.join(a)
   return r1

def dec(m):
    m = list(m)
    for i in range(len(m)):
        if (i%2==0):
            m[i]=str(chr(ord(m[i])-3))
        else:
            m[i]=str(chr(ord(m[i])-5))
    string2 = "".join(m)
    return string2


h = "Hallo"
h = enc(h)
print(h)
print(dec(h))

因此,对于字符串“ Welcome to StackOverflow”,输出将为:

after enc: Zjohrrh%wt#XwffpR{hwiqr|
after dec: Welcome to StackOverflow