Python学习——例题详解1、字符串简单加密和解密

1、加密原理

       基于按位异或(^),对字符串进行简单的加密算法原理:

ord('A')^ord('P') #加密,运算结果:17
chr(17^ord('p'))  #解密,运算结果:‘A’
2、例题

        给定字符串text作为明文(要加密的原文,同上述A)和key作为密钥(同上述P),使用按位异或循环处理text的每一个字符达到加密效果,结果就是加密后的密文(同上述加密运算结果17);解密需将密文转为明文。

from itertools import cycle
def crypt(text,key):
    result = []  #定义一个空的列表用来存放密语
    keys = cycle(key) #迭代器,用于迭代密钥的每一个字符
    for ch in text:
        result.append(chr(ord(ch)^ord(next(keys))))
        #逐字加密并将结果添加到result列表中
    return ''.join(result) #return在循环体外

#test
if __name__ == '__main__':

    plain = 'The quick brown fox jumps over the lazy dog' #明文
    key = 'Python_1' #密钥
    print('加密前明文:{}'.format(plain))
    encrypted = crypt(plain,key) #加密 
    print('加密后的密文:{}'.format(encrypted))
    decrypted = crypt(encrypted,key) #解密
    print('解密后的明文:{}'.format(decrypted))
3、详解

(1)itertools库,提供高效循环和迭代的工具,库中包含了许多用于迭代的函数。此例使用cycle()函数用来创建无限循环的可迭代对象:keys = cycle(key),进而在循环语句中next(keys)可以循环反复地取key地每个字符。例如:key = ‘zxcvb’,那么第一次循环next(keys)=‘z’,第二次循环next(keys)=‘x’,第三次循环next(keys)=‘c’,第四次循环next(keys)=‘v’,第五次循环next(keys)=‘b’,第六次循环next(keys)=‘z’……

(2)return语句应在循环体外,否则在第一次循环后生成result后直接执行return语句便会提前结束函数的执行;若要在循环中返回多个值,考虑yield语句生成一个生成器,多次返回值并保持函数的执行状态,直到完全被迭代。

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:Python有一个内置的函数可以实现简单字符串加密解密。你可以使用Python内置的hashlib模块来实现加密解密。你可以使用hashlib.md5()函数来实现加密,使用hashlib.md5(string).digest()函数来实现解密。 ### 回答2: 下面是一个简单的使用Python编写的字符串加密解密函数: ```python def encrypt_string(plain_text, shift): encrypted_text = "" for char in plain_text: if char.isalpha(): if char.isupper(): encrypted_text += chr((ord(char) - 65 + shift) % 26 + 65) else: encrypted_text += chr((ord(char) - 97 + shift) % 26 + 97) else: encrypted_text += char return encrypted_text def decrypt_string(encrypted_text, shift): decrypted_text = "" for char in encrypted_text: if char.isalpha(): if char.isupper(): decrypted_text += chr((ord(char) - 65 - shift) % 26 + 65) else: decrypted_text += chr((ord(char) - 97 - shift) % 26 + 97) else: decrypted_text += char return decrypted_text ``` 这个加密函数采用了Caesar密码的思想,对字符串的每个字母进行简单的偏移。其,偏移量由`shift`参数指定。`encrypt_string`函数将明文字符串加密为密文字符串,`decrypt_string`函数将密文字符串解密为明文字符串。 需要注意的是,这只是一个简单加密函数,不适用于加密敏感数据。 ### 回答3: 下面是一个使用Python编写的简单字符串加密解密函数: ```python def encrypt(text): encrypted_text = "" for char in text: encrypted_text += chr(ord(char) + 1) return encrypted_text def decrypt(encrypted_text): decrypted_text = "" for char in encrypted_text: decrypted_text += chr(ord(char) - 1) return decrypted_text # 使用示例 original_text = "Hello World!" encrypted_text = encrypt(original_text) decrypted_text = decrypt(encrypted_text) print("原始文本:", original_text) print("加密后:", encrypted_text) print("解密后:", decrypted_text) ``` 该加密解密函数采用了一种简单的替换算法,即将每个字符的ASCII码加1进行加密,然后再减1进行解密。通过遍历字符串的每个字符,并利用`ord`函数获取字符的ASCII码,然后使用`chr`函数将加密解密后的ASCII码转换回字符,最终得到加密解密的文本。 上述代码的输出结果如下: ``` 原始文本: Hello World! 加密后: Ifmmp!Xpsme" 解密后: Hello World! ``` 注意,这只是一个简单加密解密算法,不能保证高度安全性。有兴趣实现更高级的加密算法的话,可以参考Python的标准库提供的`hashlib`模块或第三方库如`cryptography`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值