Python实现简单可逆加密程序的完整步骤
本文提供一段Python实现的简单可逆加密程序,通过密钥生成整数序列并与文本ASCII码进行异或运算完成混淆。包含完整的命令行解析逻辑,支持直接终端调用,适合用于基础数据保护与趣味编程实践。
基于异或运算与ASCII转换的Python可逆加密实现
第1步:编写核心加解密逻辑
该模块的核心目标是将明文文本转化为单一数字字符串,并通过预设密钥进行可逆计算。算法首先读取传入的字符串,将其每个字符转换为三位数的ASCII编码,拼接后转为长整型;随后提取密钥同样转为整数序列。加密时,将文本整数与密钥整数进行按位异或(XOR)操作输出结果;解密时则通过相同的密钥再次异或还原原始ASCII序列,并逆向拼接为可读文本。
# -*- coding: utf-8 -*-
import sys
class Code:
'''可逆的加密与解密'''
def __init__(self, key="default_key"):
self.__src_key = key
self.__key = self.__get_strascii(self.__src_key, True)
def encode(self, value):
'''加密函数,加密后为一串数字'''
return "%d" % (self.__get_strascii(value, True) ^ self.__key)
def decode(self, pwd):
'''解密函数'''
if self.is_number(pwd):
return self.__get_strascii(int(pwd) ^ self.__key, False)
else:
print('Require number.')
def reset_key(self, key):
'''重新设置key'''
self.__src_key = key
self.__key = self.__get_strascii(self.__src_key, True)
def __get_strascii(self, value, bFlag):
if bFlag:
return self.__get_str2ascii(value)
else:
return self.__get_ascii2str(value)
def __get_str2ascii(self, value):
ls = []
for i in value:
ls.append(self.__get_char2ascii(i))
return int("".join(ls))
def __get_char2ascii(self, char):
try:
return "%03d" % ord(char)
except (TypeError, ValueError):
print("Key error.")
sys.exit(1)
def __get_ascii2char(self, ascii_val):
if self.is_ascii_range(ascii_val):
return chr(ascii_val)
else:
print(f"Ascii error({ascii_val})")
sys.exit(1)
def __get_ascii2str(self, n_chars):
ls = []
s = "%s" % n_chars
n, p = divmod(len(s), 3)
if p > 0:
nRet = int(s[0:p])
ls.append(self.__get_ascii2char(nRet))
pTmp = p
while pTmp < len(s):
ls.append(self.__get_ascii2char(int(s[pTmp:pTmp+3])))
pTmp += 3
return "".join(ls)
def is_number(self, value):
try:
int(value)
return True
except (TypeError, ValueError):
pass
return False
def is_ascii_range(self, n):
return 0 <= n < 256
def is_custom_ascii_range(self, n):
return 33 <= n < 48 or 58 <= n < 126
第2步:配置命令行参数解析
为方便直接在终端中运行,需搭建一个参数分发控制器。该部分负责接收外部传入的标志位,识别用户意图是加密还是解密,并将对应的文本内容与密钥传递至核心类中执行。
class Usage:
'''命令行参数读取与解析'''
def __init__(self):
self._clsWork = Code()
self._args_dic = {
'arg_help': ['-?', '-help'],
'arg_p': ['-p', '-pwd'],
'arg_t': ['-t', '-text'],
'arg_k': ['-k', '-key']
}
def help(self):
print('Usage: python script.py [-options] [args...]')
print('-k <key_str> -p <pwd_str> # 加密密码')
print('-k <key_str> -t <text_str> # 解密文本')
def args(self, argv_ls):
if len(argv_ls) <= 1 or len(argv_ls) > 5:
print('Unrecognized option')
return
cmd_dic = {}
curr_cmd = ''
for v in argv_ls[1:]:
found = False
for j_name, j_vals in self._args_dic.items():
if v in j_vals and j_name not in cmd_dic:
curr_cmd = j_name
cmd_dic[curr_cmd] = []
found = True
break
if not found and cmd_dic:
cmd_dic[curr_cmd].append(v)
if cmd_dic:
self.exec_cmd(cmd_dic)
else:
print('Unrecognized option')
def exec_cmd(self, cmd_dic):
if len(cmd_dic) == 2:
if 'arg_p' in cmd_dic and 'arg_k' in cmd_dic:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
print(self._clsWork.encode(cmd_dic['arg_p'][0]))
return
elif 'arg_t' in cmd_dic and 'arg_k' in cmd_dic:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
print(self._clsWork.decode(cmd_dic['arg_t'][0]))
return
self.help()
if __name__ == '__main__':
usage = Usage()
usage.args(sys.argv)
第3步:执行加解密操作
将上述两段代码保存为同一个文件(例如 reversible_encrypt.py),并在终端进入该文件所在目录。操作入口为系统命令行界面,用户需遵循特定的参数组合进行调用。
加密操作:输入命令 python reversible_encrypt.py -k mykey -p plaintext123。系统将返回一串由纯数字构成的加密字符串。此数字即为异或处理后的密文载体。
解密操作:输入命令 python reversible_encrypt.py -k mykey -t 123456789(替换为实际得到的数字)。控制台将直接输出还原后的原始明文内容,验证双向转换的有效性。
完成状态检查与安全提示
当终端准确打印出预期的密文数字或明文文本,且未抛出类型转换异常或越界报错时,表明程序运行成功。需要注意的是,该实现属于基础对称混淆算法,其安全性完全依赖于密钥长度与保密性,抗暴力破解能力较弱。请勿将此代码用于存储数据库凭证、支付信息或任何高敏感数据。如需正式业务级防护,请切换至国家密码管理局认证或行业标准的加密协议栈。
以上就是Python实现简单可逆加密程序的详细内容,更多关于Python基础算法与命令行开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













