密码学的加密实现

仿射密码

m = "n"  # 明文
a = list(m)  # 将明文转换为列表形式
k1 = 17  # 密钥k1与26互素的数
k2 = 9  # 偏移量
# 将明文字符串转化为Acsll码然后将0-a,25-z对应


def tihuan(a, m):
    temp = []
    for i in range(len(m)):
        if a[i].islower():
            temp.append(ord(a[i])-97)
        else:
            temp.append(ord(a[i])-65)
    return temp

# 加密函数


def encryption(temp, m, k1, k2):
    c = []
    for i in range(len(m)):
        c.append(chr((temp[i]*k1+k2) % 26+97))
    return c


temp = tihuan(a, m)
c = encryption(temp, m, k1, k2)
c1 = ""
for i in range(len(m)):
    c1 = c1+c[i]  # 将列表转化为字符串
print(c1)

维吉尼亚密码

import math
m = "appliedcryptosystem"  # 明文
a = list(m)
k = "cipher"  # 密钥
b = list(k)
# 确定分组数
if len(m) > len(k):
    x = len(m)//len(k)
else:
    x = 0
# Ascll


def tihuan(a, m):
    temp = []
    for i in range(len(m)):
        if a[i].islower():
            temp.append(ord(a[i])-97)
        else:
            temp.append(ord(a[i])-65)
    return temp

# 加密


def encryption(tempm, tempk, x):
    c = []
    z = 0
    n = len(k)
    if x == 0:  # 如果组数为0
        for i in range(len(z, n)):
            c.append(chr((tempm[i]+tempk[i % n]) % 26+97))
    else:
        for i in range(x):
            for j in range(z, n):
                c.append(chr((tempm[j]+tempk[j % len(k)]) % 26+97))
            z = n
            n += len(k)  # 我是sb能用常量不要用变量
        for d in range(x*len(k), len(m)):
            c.append(chr((tempm[d]+tempk[d % len(k)]) % 26+97))
    return c


tempm = tihuan(a, m)
tempk = tihuan(b, k)

c = encryption(tempm, tempk, x)
c1 = ""
for i in range(len(m)):
    c1 = c1+c[i]
print(c1)

hill密码

import numpy as np
m = 'se'  # 明文
a = np.matrix([[11, 2], [5, 23]])  # 密钥LCTFXZUHR
num_m = []
temp = []
count = 1
for i in m:  # 将明文分为三个一组
    temp.append(ord(i)-ord('A'))
    if count % 3 == 0:
        num_m.append(temp)
        temp = []
    count += 1
mat_m = [np.matrix(i).T for i in num_m]  # 将明文分组转换为向量形式
mat_c = [a * i % 26 for i in mat_m]  # 得到密文分组的向量形式
num_c = []
temp = []
for i in mat_c:  # 将密文向量转换为列表形式,且合并到一个列表
    temp = i.tolist()
    for j in range(3):
        num_c.append(temp[j][0])
c = [chr(i+ord('A')) for i in num_c]
print(''.join(c))  # 连接成字符串,输出密文

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容