【密码学——基础理论与应用】李子臣编著 第二章 古典密码 课后习题

embedded/2025/3/5 8:02:11/

免责声明

这里都是自己搓或者手写的。
里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正!
不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维!

题目

2.1

def decrypt(m):s=[]for i in range(len(m)):if m[i]==' ':s.append(' ')else:s.append(chr(ord(m[i])-3))str=''.join(s)return str
m="RPQLD JDOOLD HVW GLYLVD LQ SDUWHV WUHV"
print(decrypt(m))

2.2

def column_permutation(s, columns, column_mapping):#####创建矩阵rows = (len(s) + columns - 1) // columns  # 计算行数matrix = [['' for _ in range(columns)] for _ in range(rows)]  # 创建矩阵for i, char in enumerate(s):row = i // columns #行数等于位置除5col = i % columns  #列数等于位置对5取余matrix[row][col] = charfor col in range(columns):if matrix[rows-1][col] == '':matrix[rows-1][col] = ' '  # 使用 'X' 作为填充字符#####进行列置换num_rows = len(matrix)num_cols = len(matrix[0])new_matrix = [row[:] for row in matrix]  # 创建矩阵的副本mapping = {}for i in range(len(column_mapping) - 1):mapping[column_mapping[i]] = column_mapping[i + 1]mapping[column_mapping[-1]] = column_mapping[0]  # 最后一个列映射到第一个for col in range(1, num_cols + 1):  # 列索引从1开始if col in mapping:target_col = mapping[col]for row in range(num_rows):new_matrix[row][target_col - 1] = matrix[row][col - 1]res = []for j in range(num_cols):  # 列索引for i in range(num_rows): # 行索引res.append(new_matrix[i][j])return ''.join(res)plaintext="xiandaimimaxue"
columns=5
column_mapping=[1,5,3]
print(column_permutation(plaintext, columns, column_mapping))

2.3

def encrypt(plaintext, key):newplaintext = plaintext.replace(" ", "")ciphertext = []for i in range(len(newplaintext)):if newplaintext[i] != ' ':ciphertext.append(chr( (ord(newplaintext[i])-ord('a') + ord(key[i%7])-ord('a')) %26+ord('a')))else:ciphertext.append(' ')return ''.join(ciphertext)plaintext="We are discovered save yourself"
key="deceptive"print(encrypt(plaintext,key))

2.4

a=[7,3,4,1,6,8,9,5,2]
b=[4,1,2,7,9,8,5,6,3]m1="transpositionisare"
m2="arrangementofthesy"def encrypt(a,b,m):s=[0]*18for i in range(0,9):s[a[i]-1] = m[i]for i in range(0,9):s[b[i]+9-1] = m[i+9]str=''.join(s)return strprint(encrypt(a,b,m1))
print(encrypt(a,b,m2))

2.5

免责声明:感觉这题有点问题。
我们知道,明文通过加密变换变成密文
那么这题已知密文求解明文,应该要求x1-x4的逆变换,但是实际上解这题并不要求逆。

x1=[6,9,4,8,3,7,1,2,5]
x2=[1,3,5,4,7,2,6,8,9]
x3=[5,9,6,4,7,8,2,1,3]
x4=[2,5,1,6,3,9,4,7,8]m1="pinsaotrs"
m2="toinaisre"
m3="negaemrar"
m4="ttnhoyfes"
m5="omlaofmbs"
m6="esgaxsexx"def inv(a):b = [0] * 9for i in range(0,9):b[a[i]-1]=i+1return bdef decrypt(a,m):s=[0]*9for i in range(0,9):s[a[i]-1] = m[i]str=''.join(s)return str
"""
y1=inv(x1)
y2=inv(x2)
y3=inv(x3)
y4=inv(x4)
print(y1,y2,y3,y4)
"""
print(decrypt(x1,m1)+decrypt(x2,m2)+decrypt(x3,m3)+decrypt(x4,m4)+decrypt(x1,m5)+decrypt(x2,m6))

2.6

2.7

对于模27
由于仿射密码的密钥满足0≤a,b<27,gcd(a,27)=1。
3 6 9 12 15 18 21 24这8个数均不满足a,而b不受限制。
因此,a有19个数,b有27个数,密钥对有19*27个。

对于模29
由于仿射密码的密钥满足0≤a,b<29,gcd(a,29)=1。
29是质数,因此a在范围内均成立,而b不受限制。
因此,a有29个数,b有29个数,密钥对有29*29个。

2.8

def encrypt(m):s=[]for i in range(len(m)):x=ord(m[i])-ord('A')y=(5*x+7)%26c=chr(y+ord('A'))s.append(c)str=''.join(s)return str
m="HELPME"
print(encrypt(m))

2.9

import gmpy2
def decrypt(a,c):s=[]for i in range(len(c)):x=(ord(c[i])-ord('A')-2+26)%26y=(a*x)%26m=chr(y+ord('A'))s.append(m)str=''.join(s)return strc="VMWZ"
a=gmpy2.invert(11,26)
print(decrypt(a,c))

2.10

import gmpy2
def findkey(m,c):s=[]for i in range(len(c)):offset=(ord(c[i])-ord(m[i])+26)%26key=chr(offset+ord('a'))s.append(key)str=''.join(s)return str
m="nankaiuniversity"
c="nrgkrbuebvvkszmy"
print(findkey(m,c))


http://www.ppmy.cn/embedded/170131.html

相关文章

Leetcode 3474. Lexicographically Smallest Generated String

Leetcode 3474. Lexicographically Smallest Generated String 1. 解题思路2. 代码实现 题目链接&#xff1a;3474. Lexicographically Smallest Generated String 1. 解题思路 这一题思路上主要就是分成两步&#xff1a; 找到所有为T的位置&#xff0c;此时其对应的位置及…

大模型在高血压预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测高血压的原理与方法 2.1 常用大模型介绍 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与手术方案制定 3.1 术前风险因素分析 3.2 大模型预测术前风险的方法与结果 …

HSPF 水文模型建模方法与案例分析实践技术应用

在水文模拟领域&#xff0c;HSPF 模型&#xff08;Hydrological Simulation Program Fortran&#xff09;与 SWAT 模型一样&#xff0c;都是备受瞩目的水文模型软件。HSPF 模型因其强大的功能和简便的操作&#xff0c;在全球范围内得到了广泛应用。该模型不仅能够在缺乏测量数据…

【FSM-3: 串行序列】

FSM-3&#xff1a;串行序列 1 Serial receiver FSM使用总结&#xff1a; 所有涉及输出的driver原则上用cur_sta&#xff1b;若是使用nxt_sta的相当于是提前一拍知道结果&#xff0c;所以对于输出必须要使用clocked reg&#xff0c;这样才能和cur_sta对应起来&#xff1b;描述声…

[python] del

在Python中&#xff0c; del 语句用于删除对象的引用、删除列表中的元素、删除字典中的键值对、删除类的属性等&#xff0c;以下是一些应用场景示例&#xff1a; 删除变量 python x 10 del x 上述代码删除了变量 x &#xff0c;之后再访问 x 会报错&#xff0c;因为它已从内…

通俗的方式解释“零钱兑换”问题

“零钱兑换”是一道经典的算法题目&#xff0c;其主要问题是&#xff1a;给定不同面额的硬币和一个总金额&#xff0c;求出凑成总金额所需的最少硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回-1。 解题思路 动态规划&#xff1a;使用动态规划是解决零钱兑…

LLM参数高效微调技术 PRFT

LLM参数高效微调技术 1. LoRA(Low-Rank Adaptation) 原理:在预训练模型的基础上,通过在Transformer层的权重矩阵上添加低秩分解矩阵来实现微调。不改变原模型的参数,只训练低秩矩阵,从而大大减少了需要训练的参数数量。优点:减少内存占用和计算量,训练速度快,可在较小…

AI入门7:基于Ollama+DeepSeek+Dify搭建本地知识库

书接上篇&#xff1a;分别使用Page Assist、AnythingLLM和RAGFlow接入deepseek模型&#xff0c;并上传及分析本地知识&#xff1a;&#xff1a; AI入门&#xff1a;AI模型管家婆ollama的安装和使用-CSDN博客 AI入门2&#xff1a;本地AI部署&#xff0c;用ollama部署deepseek&…