博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
普莱菲尔密码矩阵生成算法
阅读量:5245 次
发布时间:2019-06-14

本文共 2657 字,大约阅读时间需要 8 分钟。

python提供了普莱菲尔密码的加解密包: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:            pass        else:            strs = strs + i    return strsdef get_matrix(key):    matrix = [([''] * 5) for i in range(5)]    temp = key_deal(key)    # print temp    charset = string.lowercase    dic = {chr(i+96): i for i in range(1, 27)}    a = -1    b = -1    k = 0    m = 0    for 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 = i                    b = j                    matrix[i][j] = temp[k]                    # print i, j, a, b, k, temp[k], matrix[i][j]                    k += 1                    continue                else:                    matrix[i][j] = temp[k]                    # print i, j, a, b, k, temp[k], matrix[i][j]                    k += 1                    continue            else:                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 = i                            b = j                            # print i, j, a, b, m, charset[m], matrix[i][j]                            m += 1                            break                    else:                        if charset[m] in temp:                            m += 1                        else:                            matrix[i][j] = charset[m]                            # print i, j, a, b, m, charset[m], matrix[i][j]                            m += 1                            break    # 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

你可能感兴趣的文章
并发、并行、同步、异步、多线程的区别
查看>>
[实践]使用JarJar优雅的发布依赖包
查看>>
[置顶] 三五杆枪,可干革命,三五个人,可以创业
查看>>
getElementByName()和getElementById的区别
查看>>
存储过程转账
查看>>
C#中 从本地DataTable中 查询符合条件的数据
查看>>
音乐之声
查看>>
ppt点击文字出现图片,再次点击消失
查看>>
【转】Eclipse 常用快捷键 (动画讲解)
查看>>
Centos7配置ThinkPHP5.0完整过程(一)
查看>>
修改C#mvc的默认首页
查看>>
禅道Bug管理工具环境搭建
查看>>
浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
查看>>
Metaprogramming in Ruby: It’s All About the Self
查看>>
UESTC 电子科大专题训练 数论 E
查看>>
ubantu系统出现登录界面死循环处理办法
查看>>
maven install 跳过测试
查看>>
最大长方形 (Maximum Submatrix & Largest Rectangle)(涵盖各种求最大矩形题目)
查看>>
Java for LeetCode 103 Binary Tree Zigzag Level Order Traversal
查看>>
并查集&线段树&树状数组&排序二叉树
查看>>