在python中创建Ascii加密函数,建议?
我试图使用以下函数在Python中创建一个加密函数在python中创建Ascii加密函数,建议?,python,python-3.x,encryption,ascii,Python,Python 3.x,Encryption,Ascii,我试图使用以下函数在Python中创建一个加密函数 def code_char(c, key): adj = ord('a') if c.islower() else ord('A') return chr(adj + (ord(c)-adj+int(key))%26) ^编码字符 def isletter(c): if 65 <= ord(c) <= 90: return True elif 97 <= ord(c) <
def code_char(c, key):
adj = ord('a') if c.islower() else ord('A')
return chr(adj + (ord(c)-adj+int(key))%26)
^编码字符
def isletter(c):
if 65 <= ord(c) <= 90:
return True
elif 97 <= ord(c) <= 122:
return True
else:
return False
def仪表(c):
如果65做了一些改变…用isleter
def isletter(c):
if 65 <= ord(c) and ord(c) <= 90:
return True
elif 97 <= ord(c) and ord(c) <= 122:
return True
else:
return False
您的问题在于code\u char
当您添加int(key)
时,您需要修改%26
以确保字母保持ascii字符:
def code_char(c, key):
adj = ord('a') if c.islower() else ord('A')
return chr(adj + (ord(c)-adj+int(key))%26)
结果:
>>> encrypt("This is a secret message!!", "12345678")
'Ujlw ny h afeuiy slatcji!!'
当然,您可以改进代码,例如您的code\u块
可以重写:
import itertools as it
def code_block(word, key):
k = it.cycle(key)
return "".join(code_char(c, next(k)) if isletter(c) else c for c in word)
您还可以重写您的isleter()
:
您可以利用已定义以下内容的字符串模块:
import string
def isletter(c):
return c in string.ascii_letters
最后,您的encrypt()
不必要地创建了一个列表和'.join()
,它只是:
def encrypt(s, key): # string is a module - may clash
return code_block(s, key)
注意:如果这给出了无效的语法消息?它不在shell中,因为我按F5运行程序,一个窗口弹出,显示无效语法,第二个窗口突出显示为红色。有什么变化?当您添加字符和数字时,它们有可能变成非字母。我如何防止这种情况并使其返回到字母表的开头?我需要写下与code\u char
现在解码\u char
相反的内容,我是否要反转code\u char
功能的符号?我正在尝试,但我尝试的任何东西都没有给我这是一条秘密消息代码>???只需-int(键)
def isletter(c):
return c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
import string
def isletter(c):
return c in string.ascii_letters
def encrypt(s, key): # string is a module - may clash
return code_block(s, key)