普莱菲尔密码矩阵生成算法

python提供了普莱菲尔密码的加解密包:pycipher

下载地址:https://pypi.python.org/pypi/pycipher

安装:python setup.py install

基本使用:

from pycipher import Playfair

print Playfair('CULTREABDFGHIKMNOPQSVWXYZ').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')
print Playfair('CULTREABDFGHIKMNOPQSVWXYZ').decipher('UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV')

输出:

UKDNLHTGFLWUSEPWHLISNPCGCRGAUBVZAQIV
THEQUICKBROWNFOXIUMPSOVERTHELAZYDOGX

# *-* coding=utf-8*-*
import string

def key_deal(key):
    strs = ''
    key = string.lower(key)
    for i in key:
        if i in strs:
            pass
        else:
            strs = strs + i
    return strs

def 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 matrix

if __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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值