Python编程:实现凯撒密码加密解密

举报
彭世瑜 发表于 2021/08/14 01:23:35 2021/08/14
【摘要】 凯撒密码 原理: 通过把字母移动一定的位数来实现加解密 明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。 例如: 当步长为3时,A被替换成D,B被替换成E,依此类推,X替换成A。 在密码学中,用于解决复杂问题的步骤,称为一种算法 加密算法: 从明文到密文的过程 解密算法: 从密文到明文的过程 二者合称为密码算法。 密码算法+密钥...

凯撒密码

原理:
通过把字母移动一定的位数来实现加解密

明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。

例如:
当步长为3时,A被替换成D,B被替换成E,依此类推,X替换成A。
在这里插入图片描述

在密码学中,用于解决复杂问题的步骤,称为一种算法
加密算法: 从明文到密文的过程
解密算法: 从密文到明文的过程
二者合称为密码算法。

密码算法+密钥构成了数据加密和解密

对称加密: 在加密和解密的过程中使用相同密钥的算法,例如:凯撒密码
非对称密码(公钥加密算法):加密和解密使用不同密钥的算法,例如:RSA

Python来实现凯撒密码

在这里插入图片描述

ord() :将字符转换为了对应的 ASCII 值
chr(): 将对应的值转换为字符
取模运算: 将一个数整除另一个数得到的余数,余数即模运算的值

# -*- coding: utf-8 -*-

# @Date : 2018-10-12
# @Author  : Peng Shiyu

class CaesarCipher(object): """ 凯撒加密解密 """ def __crypt(self, char, key): """ 对单个字母加密,偏移 @param char: {str} 单个字符 @param key: {num} 偏移量 @return: {str} 加密后的字符 """ if not char.isalpha(): return char else: base = "A" if char.isupper() else "a" return chr((ord(char) - ord(base) + key) % 26 + ord(base)) def encrypt(self, char, key): """ 对字符加密 """ return self.__crypt(char, key) def decrypt(self, char, key): """ 对字符解密 """ return self.__crypt(char, -key) def __crypt_text(self, func, text, key): """ 对文本加密 @param char: {str} 文本 @param key: {num} 偏移量 @return: {str} 加密后的文本 """ lines = [] for line in text.split("\n"): words = [] for word in line.split(" "): chars = [] for char in word: chars.append(func(char, key)) words.append("".join(chars)) lines.append(" ".join(words)) return "\n".join(lines) def encrypt_text(self, text, key): """ 对文本加密 """ return self.__crypt_text(self.encrypt, text, key) def decrypt_text(self, text, key): """ 对文本解密 """ return self.__crypt_text(self.decrypt, text, key)


if __name__ == '__main__': plain = """ you know? I love you! """ key = 3 cipher = CaesarCipher() # 加密 print(cipher.encrypt_text(plain, key)) # brx nqrz? L oryh brx! # 解密 print(cipher.decrypt_text("brx nqrz? L oryh brx!", key)) # you know? I love you!


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

详细参考:
Hacking- Python之禅

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/83029736

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。