Python练手----字符串的密钥加密
最近各种笔试加上leetcode刷题遇到很多加密题目,这些题目大同小异都是给出一个原始字符串和一个密钥。通过密钥和26个英文字母的对应关系对原文字符串进行加密。
例如:原字符串为“hello”,密钥为“2345678”,加密方式为:对字符串中的每一个字符,按照字母表依次采用密钥中的数字往前或者往后遍历若干个字母,其中偶数位上的字符往前遍历,奇数位上的字符往后遍历。
以上边给出的原字符串和密钥为例。第0个字符为h,对应密钥中数字为2,0认为是偶数位,那么按照字母表顺序从h往前遍历2个字母,得到新字母f;第1个字符为e,对应密钥中的数字为3,1为奇数位,那么按照字母表顺序往后遍历3个字母,得到新字符h。依次类推,加密后的密文为:“fhhqi”
接下来是代码实现。我的思路是首先将每一位上的字母转化为对应的ASCII码,然后对ASCII码进行加减值的操作,最后再转化回来。还有其他很多更好的方法,有很多大佬博主写的很好,这里就不再赘述了。以下是代码部分。
"""
函数解释:
Encryption()函数为加密算法的实现过程
ini_str为带加密的原文
key为加密所使用的密钥
加密规则为:
偶数位数上的按照密钥的数字按照字母表顺序往前移动,奇数位数上的按照密钥的数字按照字母表顺序往后移动
"""
def Encryption(ini_str,key):
len_key = len(key) # 记录密钥长度
len_str = len(ini_str) # 记录原文长度
fin_res = [] # 记录加密后的密文字符
for i in range(len_str):
ini_loc = ord(ini_str[i]) # 将字母转化为对应的ASCII码
k_value = int(key[i%len_key]) # 计算其在密钥中对应的值
if i%2==0:
new_loc = (ini_loc-97-k_value)%26+97 # 计算加密后字符对应的ASCII码
fin_res.append(chr(new_loc)) # 转化为字符串后加入数组
else:
new_loc = (ini_loc - 97 + k_value) % 26 + 97
fin_res.append(chr(new_loc))
fin_res = ''.join(fin_res) # 将列表转化为字符串
return fin_res
if __name__=='__main__':
init_str = input("Please input the text: ")
key = input("Please input the key: ")
res = Encryption(init_str,key)
print(res)
运行结果: