Python练手----字符串的密钥加密

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)

运行结果:

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值