多码加密 vigenere算法 python 实现

2023-11-20 20:38

本文主要是介绍多码加密 vigenere算法 python 实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/woshiaotian/article/details/18038391

基于我自己对 vigenere 的理解,另外vigenere 属于非常弱的一种加密,用于生产环境不是非常安全请注意

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # -*- coding:utf-8 -*-  
  2. ##################################  
  3. # Vigenere 是一种多码加密法  
  4. # author vearne  
  5. # ***注意***:  
  6. # 1) 字母表中必须要包含明文中出现的字母  
  7. # 2) 密钥不能为空  
  8.   
  9. ##################################  
  10. class Vigenere(object):  
  11.     def __init__(self, table='0123456789', key='apple'):  
  12.         # 字母表  
  13.         self.table = table  
  14.         # 密钥  
  15.         self.key = key  
  16.           
  17.     def genNum(self, curr):  
  18.         if curr + 1 >= len(self.key):  
  19.             return 0  
  20.         else:  
  21.             return curr + 1  
  22.               
  23.     def dict(self, chr, move):  
  24.         index = self.table.index(chr)  
  25.         return self.table[(index + move) % len(self.table)]  
  26.        
  27.     def encrypt(self, cleartext):  
  28.         # i 指向明文, j 指向密钥  
  29.         j = 0  
  30.         ll = []  
  31.         for i in range(len(cleartext)):  
  32.             move = ord(self.key[j]) % len(self.table)  
  33. #            print 'move', move  
  34.             new_chr = self.dict(cleartext[i], move)  
  35.             ll.append(new_chr)  
  36.             j = self.genNum(j)  
  37.         return ''.join(ll)  
  38.               
  39.     def decrypt(self, ciphertext):  
  40.         # i 指向密文, j 指向密钥  
  41.         j = 0  
  42.         ll = []  
  43.         for i in range(len(ciphertext)):  
  44.             move = ord(self.key[j]) % len(self.table)  
  45.             move = move * (-1)  
  46. #            print 'move', move  
  47.             new_chr = self.dict(ciphertext[i], move)  
  48.             ll.append(new_chr)  
  49.             j = self.genNum(j)  
  50.         return ''.join(ll)  
  51.           
  52. if __name__ == '__main__':  
  53.     v = Vigenere(key='apple077226')  
  54.     cleartext = '000000668'  
  55.     print cleartext  
  56.     ciphertext = v.encrypt(cleartext)  
  57.     print ciphertext  
  58.     print '----------------------------------'  
  59.     cleartext = v.decrypt(ciphertext)  
  60.     print cleartext  


如果字母表中的字母出现不重复,则可以保证明文跟密文的一一映射,如果出现重复,则会出现明文跟密文的多对一映射。

打乱字母表中字母的顺序,可以使密文更具有欺骗性。


这篇关于多码加密 vigenere算法 python 实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397283

相关文章

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(