当前位置: 首页 > news >正文

维吉尼亚密码加解密实现(python)

维吉尼亚密码

原理

维吉尼亚密码(Vigenere)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

下面给出一个例子

明文:come greatwall
密钥:crypto

首先,对密钥进行填充使其长度与明文长度一样。

明文comegreatwall
密钥cryptocryptoc

其次,查表得密文
维吉尼亚加密

明文:come greatwall
密钥:crypto
密文:efkt zferrltzn

加解密脚本

from string import ascii_uppercase, ascii_lowercasedef vigenere_encrypt(plaintext: str, key: str) -> str:ciphertext = ''key_index = 0for char in plaintext:if char in ascii_uppercase:# 计算偏移量key_char = key[key_index % len(key)]shift = ord(key_char) - ord('A')# 加密字符ciphertext += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))key_index += 1elif char in ascii_lowercase:key_char = key[key_index % len(key)]shift = ord(key_char) - ord('a')# 加密字符ciphertext += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))key_index += 1else:ciphertext += charreturn ciphertextdef vigenere_decrypt(ciphertext: str, key: str) -> str:plaintext = ''key_index = 0for char in ciphertext:if char in ascii_uppercase:# 计算偏移量key_char = key[key_index % len(key)]shift = ord(key_char) - ord('A')# 解密字符plaintext += chr((ord(char) - ord('A') - shift) % 26 + ord('A'))key_index += 1elif char in ascii_lowercase:# 计算偏移量key_char = key[key_index % len(key)]shift = ord(key_char) - ord('a')# 解密字符plaintext += chr((ord(char) - ord('a') - shift) % 26 + ord('a'))key_index += 1else:plaintext += charreturn plaintext

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android 12系统源码_多屏幕(一)多屏幕设备显示Activity
  • 超声波眼镜清洗机哪个性价比高?2024推荐四款清洁力高的超声波清洗机
  • 第十一章:图论part06 108.冗余连接 109.冗余连接II (补)
  • 3、pnpm yarn npm
  • MySQL笔记(十):视图
  • 【力扣】70.爬楼梯
  • 嵌入式初学-C语言-十七
  • 算法板子:分解质因数
  • 【等保测评】网络安全服务认证技术规范(等级保护测评)
  • openEuler 自定义ISO制作(logo,名称,ISO)
  • LeetCode刷题笔记第17题:电话号码的字母组合
  • web安全基础学习
  • R9000P 双系统安装 win11 和 ubuntu
  • VBA 程序运行中禁用鼠标键盘
  • 单 元 测 试
  • ----------
  • 【css3】浏览器内核及其兼容性
  • 【刷算法】从上往下打印二叉树
  • 【刷算法】求1+2+3+...+n
  • Android组件 - 收藏集 - 掘金
  • Angular 响应式表单之下拉框
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ECS应用管理最佳实践
  • golang中接口赋值与方法集
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript设计模式学习之Observer(观察者)模式
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • maya建模与骨骼动画快速实现人工鱼
  • Nodejs和JavaWeb协助开发
  • PHP 7 修改了什么呢 -- 2
  • react-native 安卓真机环境搭建
  • REST架构的思考
  • TCP拥塞控制
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 程序员该如何有效的找工作?
  • 搭建gitbook 和 访问权限认证
  • 关于Java中分层中遇到的一些问题
  • 记录:CentOS7.2配置LNMP环境记录
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 使用parted解决大于2T的磁盘分区
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #数学建模# 线性规划问题的Matlab求解
  • (1) caustics\
  • (35)远程识别(又称无人机识别)(二)
  • (LeetCode 49)Anagrams
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (区间dp) (经典例题) 石子合并
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (小白学Java)Java简介和基本配置