普莱菲尔密码矩阵生成算法
python提供了普莱菲尔密码的加解密包:pycipher
下载地址:https://pypi.python.org/pypi/pycipher
安装:python setup.py install
基本使用:
from pycipher import Playfairprint Playfair('CULTREABDFGHIKMNOPQSVWXYZ').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG') print Playfair('CULTREABDFGHIKMNOPQSVWXYZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV')
输出:
UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV
THEQUICKBROWNFOXIUMPSOVERTHELAZYDOGX
# *-* coding=utf-8*-* import stringdef key_deal(key):strs = ''key = string.lower(key)for i in key:if i in strs:passelse:strs = strs + ireturn strsdef get_matrix(key):matrix = [([''] * 5) for i in range(5)]temp = key_deal(key)# print tempcharset = string.lowercasedic = {chr(i+96): i for i in range(1, 27)}a = -1b = -1k = 0m = 0for j in range(5): # 列for i in range(5): # 行if k < len(temp):if dic.get(temp[k]) == 9 or dic.get(temp[k]) == 10:a = ib = jmatrix[i][j] = temp[k]# print i, j, a, b, k, temp[k], matrix[i][j]k += 1continueelse:matrix[i][j] = temp[k]# print i, j, a, b, k, temp[k], matrix[i][j]k += 1continueelse:while m < len(dic):if dic.get(charset[m]) == 9 or dic.get(charset[m]) == 10:if a != -1 or b != -1:matrix[a][b] = matrix[a][b] + charset[m]m += 1 # matrix[i][j]还没定,需要继续else:matrix[i][j] = charset[m]a = ib = j# print i, j, a, b, m, charset[m], matrix[i][j]m += 1breakelse:if charset[m] in temp:m += 1else:matrix[i][j] = charset[m]# print i, j, a, b, m, charset[m], matrix[i][j]m += 1break# for i in range(5):# for j in range(5):# print i, j, matrix[i][j]# return matrixif __name__ == '__main__':key = 'CULTURE'matrix = get_matrix(key)plaintext = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'strs = string.lower(''.join(plaintext.split(' ')))if len(strs) % 2 != 0:strs += 'x'print strs
转载于:https://www.cnblogs.com/gwind/p/8012049.html
普莱菲尔密码矩阵生成算法相关推荐
- 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)
古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...
- 加密解密工具 之 普莱费尔密码
普莱费尔密码(英文:Playfair Cipher 或 Playfair Square)是一种使用一个关键词方格来加密字符对的加密法,1854年由一位名叫查尔斯·惠斯通(Charles Wheatst ...
- 用python做算法_自己用python写的螺旋矩阵生成算法
自己用python写的螺旋矩阵生成算法 如果输入6,可以生成如下矩阵: 1 20 19 18 17 16 2 21 32 31 30 15 3 22 33 36 29 14 4 23 34 35 28 ...
- 普莱费尔密码加密解密
普莱费尔密码的编写方法通常分为三个步骤,即编制密码表,整理明文,编写译文,下面以明文:pishoupideweinasi和密钥"culture"为例讲解. 1.编制密码表 我们需要 ...
- hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码
Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码 王笋,徐小双(华中科技大学控制科学与工程系,武汉 430074) 摘 要 Hilbert曲线是一种重要的图像处理工具,在图像处理,特别是图 ...
- c语言 迷宫深度遍历 算法,图的遍历迷宫生成算法浅析
1. 引言 在平常的游戏中,我们常常会碰到随机生成的地图.这里我们就来看看一个简单的随机迷宫是如何生成. 2. 迷宫描述随机生成一个m * n的迷宫,可用一个矩阵maze[m][n]来表示,如图: ...
- 动态密码卡TOTP算法
TOTP NET实现:http://googleauthcsharp.codeplex.com/ 引用:http://www.cnblogs.com/wangxin201492/p/5030943.h ...
- [迷宫中的算法实践]迷宫生成算法——Prim算法
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)), ...
- phpcms authkey生成算法问题导致authkey泄露
关于phpcms authkey生成算法问题导致authkey泄露的修复问题 简介: 漏洞名称:phpcms authkey生成算法问题导致authkey泄露 补丁文件:caches/configs/ ...
最新文章
- MIT与FAIR提出「mixup」,利用数据和标签的随机线性插值提高神经网络的健壮性
- 数字图像处理技术详解程序_安装地暖施工程序有哪些 安装地暖技术要求是什么【详解】...
- 离散对数和原根 欧拉定理证明
- 剑指offer--在O(1)时间内删除链表结点
- Java-IO-对接流
- 微信停机断网可充话费;苹果正研发可折叠屏幕 iPad;Rust 1.36.0 发布 | 极客头条...
- [渝粤教育] 西南科技大学 经济法学 在线考试复习资料(1)
- linux 第六章 linux中的进程管理
- google 搜索接口
- 小白如何在阿里云快速建站(pc站+手机站+公众号+小程序)
- 国科大 计算机网络 复习整理笔记
- ADO/ADO.NET
- VBS了解一下呗(有没有用学了才知道)
- Vue--keep-alive--详解
- 随机优化中的样本均值近似方法
- 敏捷领导力系列介绍--全景领导力LCP的学习心得
- 『高性能模型』轻量级网络梳理
- 中信科移动IPO过会:年营收57亿 拟募资40亿重点研发5G
- RPC 远程过程调用(Remote Procedure Call)
- COG封装工艺的介绍