Python内置函数实现字符串密钥加解密方案

许南星
许南星
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍了一种利用Python内置函数ord()和chr()实现字符串密钥加解密的方法。该方法无需安装Crypto等第三方库,通过遍历字符串与密钥字符的Unicode码位进行加减运算,实现数据的简单加密与解密,适用于对安全性要求不高且希望减少依赖的场景。

Python内置函数实现字符串密钥加解密方案

在软件开发过程中,常需采用各类加密算法保护数据与信息安全,例如常见的MD5哈希加密或AES对称加密等。

针对密码认证场景,MD5因无需处理明文、仅需比对哈希值即可验证数据一致性而适用;而对于需要加密后还原数据的场景,AES则更为常用。

在Python中实现AES算法通常依赖第三方库Crypto,其跨平台安装较为复杂,对于简单需求而言显得过于沉重。在Mrdoc项目开发中,为避免引入易出错的第三方依赖,同时满足对用户输入密码进行加解密的需求,最终选择了基于Python内置方法的实现方案。

设置密钥

一、设置密钥

该加解密方案需预设一个密钥,用于数据的加密与解密过程。在Mrdoc项目中,直接复用Django项目的SECRET_KEY变量作为密钥,遵循复杂且长度足够的原则:

key = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'

后续所有数据的加密与解密操作均依赖此密钥。

数据加密逻辑

二、数据加密逻辑

加密核心逻辑较为简单,主要依赖Python内置函数ord(),该函数用于返回单字节ASCII字符对应的Unicode码位。具体加密步骤如下:

1、初始化一个空字符串变量,用于存储加密结果; 2、利用zip()函数同时遍历原始数据字符串与密钥字符串; 3、分别获取遍历到的数据字符与密钥字符的Unicode码位,将两者相加得到加密字符的码位表示; 4、将计算得到的加密字符追加至空字符串变量中; 5、最终返回包含所有加密字符的字符串变量;

具体实现代码如下:


# 加密
def enctry(s):
 k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
 encry_str = ""
 for i,j in zip(s,k):
  # i为字符,j为秘钥字符
  temp = str(ord(i)+ord(j))+'_' # 加密字符 = 字符的Unicode码 + 秘钥的Unicode码
  encry_str = encry_str + temp
 return encry_str

若使用上述加密方法处理字符串“zmister”,最终生成的加密字符串如下所示:

'222_215_218_152_169_200_231_'

数据解密逻辑

三、数据解密逻辑

解密过程与加密相反,需将Unicode码位还原为单字节ASCII字符,这依赖于Python内置函数chr()。具体解密步骤如下:

1、定义一个空字符串变量,用于存储解密结果; 2、利用zip()函数同时遍历加密后的数据字符串与密钥字符串; 3、计算加密数据字符的Unicode码位减去密钥字符的Unicode码位,得到原始数据的Unicode码位,随后使用chr()函数将其还原为ASCII单字节字符; 4、将得到的解密字符追加至空字符串变量中; 5、返回最终的解密字符串;

具体实现代码如下:


# 解密
def dectry(p):
 k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
 dec_str = ""
 for i,j in zip(p.split("_")[:-1],k):
  # i 为加密字符,j为秘钥字符
  temp = chr(int(i) - ord(j)) # 解密字符 = (加密Unicode码字符 - 秘钥字符的Unicode码)的单字节字符
  dec_str = dec_str+temp
 return dec_str

通过上述逻辑,即可将加密数据还原。以下提供完整代码用于测试:


# coding:utf-8
# @文件: utils.py
# @创建者:州的先生
# #日期:2019/12/8
# 博客地址:zmister.com

# 加密
def enctry(s):
 k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
 encry_str = ""
 for i,j in zip(s,k):
  # i为字符,j为秘钥字符
  temp = str(ord(i)+ord(j))+'_' # 加密字符 = 字符的Unicode码 + 秘钥的Unicode码
  encry_str = encry_str + temp
 return encry_str

# 解密
def dectry(p):
 k = 'djq%5cu#-jeq15abg$z9_i#_w=$o88m!*alpbedlbat8cr74sd'
 dec_str = ""
 for i,j in zip(p.split("_")[:-1],k):
  # i 为加密字符,j为秘钥字符
  temp = chr(int(i) - ord(j)) # 解密字符 = (加密Unicode码字符 - 秘钥字符的Unicode码)的单字节字符
  dec_str = dec_str+temp
 return dec_str

data = "zmister.com"
print("原始数据为:",data)
enc_str = enctry(data)
print("加密数据为:",enc_str)
dec_str = dectry(enc_str)
print("解密数据为:",dec_str)

运行上述代码,输出结果如下图所示:

 

总结

四、总结

该方法对于一般性数据加解密需求而言,实现简单且便捷。主要考量因素在于密钥的复杂性与安全性。若存在更优实现方案,欢迎留言探讨。

字符串内置简单加密示例

附:Python利用字符串内置函数实现加密和解密

字符串内置简单加密示例


encode = str.maketrans('eilouvy','1234567')#加密方式 
words = 'iloveyou' 
encode_words = words.translate(encode)#按encode加密方式加密 
print(encode_words) #输出23461745 
dedoed = str.maketrans('1234567','eilouvy')#解密方式 
dedoed_words = encode_words.translate(dedoed)#按decode解密方式解密 
print(dedoed_words)#输出iloveyou 

此方式极为简单,其中str.maketrans()函数的两个参数内容一一对应,解密时仅需反转映射方向即可。

总结

以上介绍了利用Python内置方法实现字符串密钥加解密的技术方案,希望能对读者有所帮助。如有疑问请留言,小编会及时回复。感谢大家对本站的支持! 若本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表