本文实例为大家分享了python实现维吉尼亚算法的具体代码,供大家参考,具体内容如下

1 Virginia加密算法、解密算法

Vigenenre密码是最著名的多表代换密码,是法国著名密码学家Vigenenre发明的。Vigenenre密码使用一个词组作为密钥,密钥中每一个字母用来确定一个代换表,每一个密钥字母被用来加密一个明文字母,第一个密钥字母加密第一个明文字母,第二个密钥字母加密第二个明文字母,等所有密钥字母使用完后,密钥再次循环使用,于是加解密前需先将明密文按照密钥长度进行分组。

密码算法可表示如下:。

设明文串为:

M=m1m2…mn,mi∈charset, n是明文长度

秘钥为:

K=k1k2…kd,ki∈charset, d是秘钥长度

密文为:

C=c1c2…cn,ci∈charset, n是密文长度

加密算法:

cj+td=(mj+td+kj ) mod 26

j=1…d,  t=0…ceiling(n/d)-1

其中ceiling(x)函数表示不小于x最小整数

解密算法:

mj+td=(cj+td -kj ) mod 26

j=1…d, t=0…ceiling(n/d)-1

其中ceiling(x)函数表示不小于x最小整数

加解密代码如下

def VigenereEncrypto(message, key):

msLen = len(message)

keyLen = len(key)

message = message.upper()

key = key.upper()

raw = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"# 明文空间

# 定义加密后的字符串

ciphertext = ""

# 开始加密

for i in range(0, msLen):

# 轮询key的字符

j = i % keyLen

# 判断字符是否为英文字符,不是则直接向后面追加且继续

if message[i] not in raw:

ciphertext += message[i]

continue

encodechr = chr((ord(message[i]) - ord("A") + ord(key[j]) - ord("A")) % 26 + ord("A"))

# 追加字符

ciphertext += encodechr

# 返回加密后的字符串

return ciphertext

if __name__ == "__main__":

message = "Hello, World!"

key = "key"

text = VigenereEncrypto(message, key)

print(text)

def VigenereDecrypto(ciphertext, key):

msLen = len(ciphertext)

keyLen = len(key)

key = key.upper()

raw = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"# 密文空间

plaintext = ""

for i in range(0, msLen):# 开始解密

# 轮询key的字符

j = i % keyLen

# 判断字符是否为英文字符,不是则直接向后面追加且继续

if ciphertext[i] not in raw:

plaintext += ciphertext[i]

continue

decodechr = chr((ord(ciphertext[i]) - ord("A") - ord(key[j]) - ord("A")) % 26 + ord("A"))

# 追加字符

plaintext += decodechr

# 返回加密后的字符串

return plaintext

if __name__=="__main__":

ciphertext = "RIJVS, AMBPB!"

key = "key"

text = VigenereDecrypto(ciphertext, key)

print(text)

import VigenereDecrypto

import VigenereEncrypto

def main():

info = '''==========********=========='''# 开始加密

print(info, "\n------维吉尼亚加密算法------")

print(info)

# 读取测试文本文档

message = open("test.txt","r+").read()

print("读取测试文本文档:test.txt")

print("开始加密!")

# 输入key

key = input("请输入密钥:")

# 进入加密算法

CipherText = VigenereEncrypto.VigenereEncrypto(message, key)

# 写入密文文本文档

C = open("CipherText.txt", "w+")

C.write(CipherText)

C.close()

print("加密后得到的密文是: \n" + CipherText)

# 开始解密

print(info, "\n------维吉尼亚解密算法------")

print(info)

# 读取加密文本文档

print("读取密文文本文档:CipherText.txt")

Ciphertext = open("CipherText.txt", "r+").read()

# 进入解密算法

print("开始解密!")

Plaintext = VigenereDecrypto.VigenereDecrypto(Ciphertext, key)

P = open("PlainText.txt", "w+")

# 写入解密文本文档

P.write(Plaintext)

P.close()

print("解密后得到的明文是 : \n" + Plaintext)

if __name__=="__main__":

main()

2重合指数法

2.1重合指数

设x=X1X2...Xn是一个含有n个字符的字符串,x的重合指数记为Ic(x),定义为x中两个随机元素相同的概率。

设y是一个长度为n密文,即y=y1y2...ym,其中y是密文字母,同样来求从中抽到两个相同字母的概率是多少。为此,设NA为字母A在这份密文中的频数,设Nb为字母B在这份密文中的频数,依此类推

从n个密文字母中抽取两个字母的方式有

php实现维吉尼亚算法,python实现维吉尼亚算法相关推荐

  1. python 二维数组心得_基于python 二维数组及画图的实例详解

    python中如何使用二维数组 在Python中,一个像这样的多维表格可以通过"序列的序列"实现.一个表格是行的序列.每一行又是独立单元格的序列.这类似于小编们使用的数学记号,在数 ...

  2. 图解leetcode初级算法python版 pdf_图解LeetCode初级算法(Python版)

    第1章 浅谈算法 1.1 算法概述 1.2 度量算法 1.2.1 时间复杂度 1.2.2 空间复杂度 1.3 Python&Pythonic 第2章 基础算法之排序 2.1 冒泡排序 2.1. ...

  3. 社区发现算法python视频_社区发现FN算法Python实现

    社区发现FN算法Python实现 算法原理 评价指标 结果对比 源码 ​2004年,Newman在GN(Girvan and Newman, 2002)算法的基础上,提出了另外一种快速检测社区的算法, ...

  4. python画二维数组散点图_基于python二维数组及画图的实例详解

    基于python二维数组及画图的实例详解 下面小编就为大家分享一篇基于python 二维数组及画图的实例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.二维数组取值 注:不管 ...

  5. python运维开发前景_【python运维开发工程师就业前景怎么样|做python运维开发工程师有前途吗】-看准网...

    职位薪资:20000-40000 经验:5-10年 学历:本科 类型:全职 岗位职责: --负责腾讯云基础IAAS运维支撑平台设计和开发: --负责优化.改进运维支撑系统,并保证其安全高效稳定的运行: ...

  6. 二分查找算法python实现_Python实现-二分查找算法(3种方法)

    如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? lst = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, ...

  7. 漫画算法python版下载_漫画排序算法Python实现

    冒泡排序 冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时, 交换它们的位置;当一个元素小于或等于右侧相邻元素时,位置不变. def bubbleSort(list): ran ...

  8. knn算法python理解与预测_K近邻算法用作回归的使用介绍(使用Python代码)

    介绍 在我遇到的所有机器学习算法中,KNN是最容易上手的.尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样). 甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更 ...

  9. 排序算法—Python实现十大常用排序算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天将为大家介绍常用的十大排序算法中最简单的五种(冒泡.选择.插入 ...

最新文章

  1. 关于SQL查询效率,100w数据,查询只要1秒
  2. linux ext4 文件大小,[svc]为何linux ext4文件系统目录默认大小是4k?
  3. java 计算运算表达式_java字符串运算表达式的计算
  4. random(随机模块)
  5. 校级选修课《软件开发实践》教学大纲(200807修订)
  6. 基于DEAP库的python进化算法--遗传算法实践--最短路径问题
  7. Python基本数据类型(列表)
  8. unantu下的tmp文件夹_纯干货:Linux各文件夹结构说明及用途介绍
  9. Java 正则表达式的用法与实例
  10. mujoco_py中文文档
  11. 浅谈谷歌退出中国市场带来的问题
  12. 搜狗输入法linux设置快捷键设置,搜狗输入法怎么创建桌面快捷键方式?
  13. python样本期望值_机器学习中的概率论与梳理统计(Python实现数学期望、方差等)...
  14. 端端Clouduolc的安全机制
  15. 处理未支付订单30分钟后取消方案分析
  16. buffer几种用法
  17. Java小白入门200例14之求最大公约数
  18. mac 文字识别软件ocr_Mac平台上一款免费的OCR文字识别功能的屏幕截图软件Screen OCR...
  19. Elasticsearch升级1.5版本暴露jdk的bug
  20. 纯java实现相片转素描

热门文章

  1. 卡巴斯基在桌面窗口管理器中发现零日漏洞
  2. rono在oracle的作用_Oracle中存储过程的作用和用法
  3. 中考词汇测试软件,百词斩中考版
  4. 大促场景系统稳定性保障实践经验总结
  5. 头同尾合十的算法_头同尾合十的计算规律
  6. kaggle+feature engineering(知乎抄的
  7. 关于电脑注册表regedit自定义管理右键菜单选项实例(删除增加)
  8. java针刺治疗尿潴留,针刺治疗尿潴留52例疗效观察
  9. python实战| 爬取虎牙高质量小姐姐私房照!
  10. 计算机相关知识分享,计算机基础知识论文分享