python 密码学 第一版 第二版_Python密码学编程 第2版

第 1章 制作纸质密码学工具1

1.1 什么是密码学1

1.2 编码与密码2

1.3 凯撒密码3

1.3.1 密码轮3

1.3.2 使用密码轮进行加密4

1.3.3 使用密码轮进行解密5

1.3.4 通过计算进行加密和解密5

1.4 为什么加密两次不起作用6

1.5 小结 7

1.6 习题 7

第 2章 在交互式运行环境中编程8

2.1 简单的数学表达式8

2.2 整型和浮点数的值9

2.3 表达式10

第 1章 制作纸质密码学工具1

1.1 什么是密码学1

1.2 编码与密码2

1.3 凯撒密码3

1.3.1 密码轮3

1.3.2 使用密码轮进行加密4

1.3.3 使用密码轮进行解密5

1.3.4 通过计算进行加密和解密5

1.4 为什么加密两次不起作用6

1.5 小结 7

1.6 习题 7

第 2章 在交互式运行环境中编程8

2.1 简单的数学表达式8

2.2 整型和浮点数的值9

2.3 表达式10

2.4 运算顺序10

2.5 计算表达式的值10

2.6 用变量存储数值12

2.7 重写变量13

2.8 变量名14

2.9 小结 14

2.10 习题 15

第3章 字符串及编写程序16

3.1 用字符串的值处理文本16

3.1.1 “+”运算符实现字符串拼接17

3.1.2 “*”运算符实现字符串复制18

3.1.3 通过索引获得字符串中的字符18

3.2 用print()函数打印值21

3.3 打印转义字符22

3.4 引号和双引号23

3.5 在集成开发环境的文件编辑器中编写程序23

3.6 “Hello, World!”程序的源代码24

3.7 使用在线比较工具检查源代码25

3.8 通过集成开发环境保存程序26

3.8.1 保存程序26

3.8.2 运行程序26

3.8.3 打开保存的程序27

3.9 “Hello, World! ”程序如何工作27

3.9.1 注释28

3.9.2 打印指示信息28

3.9.3 接收输入28

3.9.4 完成程序29

3.10 小结 29

3.11 习题 30

第4章 反向密码31

4.1 反向密码程序的源代码31

4.2 反向密码程序的执行结果样例32

4.3 设置注释及变量32

4.4 确定字符串的长度33

4.5 while循环33

4.6 Boolean数据类型34

4.7 比较操作符34

4.8 代码块36

4.9 while循环语句37

4.10 “增长”字符串38

4.11 用input()提示改进程序40

4.12 小结 41

4.13 习题 41

第5章 凯撒密码42

5.1 凯撒密码程序的源代码42

5.2 凯撒密码程序样例运行43

5.3 导入模块并创建变量44

5.4 常量和变量45

5.5 for循环语句45

5.5.1 for循环的示例46

5.5.2 等价于for循环的while循环46

5.6 if语句47

5.6.1 if语句的示例47

5.6.2 else语句48

5.6.3 elif语句48

5.7 in和not in运算符49

5.8 find()字符串方法50

5.9 符号加密和解密51

5.9.1 实现“回环”51

5.9.2 处理符号集以外的符号52

5.10 显示和复制translated字符串52

5.11 加密其他字符53

5.12 小结 53

5.13 习题 54

第6章 用暴力算法破解凯撒密码56

6.1 破解凯撒密码的源代码56

6.2 运行凯撒密码破解程序的样例57

6.3 设置变量58

6.4 在循环中使用range()方法58

6.5 解密消息59

6.6 使用字符串标准化输出密钥及

解密后的信息60

6.7 小结 61

6.8 习题 62

第7章 通过置换密码实现加密63

7.1 置换密码如何工作63

7.1.1 手动加密消息64

7.1.2 创建加密程序65

7.2 置换密码加密程序的源代码66

7.3 置换密码加密程序的示例运行67

7.4 用def语句创建自定义函数67

7.4.1 定义用形参接收实参的函数68

7.4.2 改仅存在于函数中的形参68

7.4.3 定义main()函数69

7.5 以参数形式传递密钥和消息70

7.6 数据类型:列表70

7.6.1 对列表中的项重新赋值71

7.6.2 多级列表72

7.6.3 对列表使用len()和in运算符72

7.6.4 用+和*运算符连接和复制列表73

7.7 置换加密算法74

7.8 增量赋值运算符75

7.9 随消息移动currentIndex75

7.10 join()字符串方法77

7.11 返回值和返回语句77

7.11.1 return语句示例78

7.11.2 返回加密得到的密文78

7.12 __name__变量78

7.13 小结 79

7.14 习题 80

第8章 解密置换密码81

8.1 如何在纸上解密置换密码81

8.2 置换密码解密程序的源代码82

8.3 运行置换密码解密程序的样例84

8.4 导入模块并创建主函数84

8.5 使用密钥解密消息84

8.5.1 round()、math.ceil()和math.floor()方法85

8.5.2 decryptMessage()函数86

8.5.3 布尔操作符87

8.5.4 使用and和or操作符往往是一条捷径89

8.5.5 布尔操作符的运算顺序90

8.5.6 调整变量column和row的值90

8.6 调用main()函数92

8.7 小结 92

8.8 习题 92

第9章 编写测试程序94

9.1 置换密码测试程序的源代码94

9.2 运行置换密码测试程序的示例95

9.3 导入模块96

9.4 生成伪随机数96

9.5 创建随机字符串97

9.5.1 将字符串复制随机次98

9.5.2 列表变量使用引用98

9.5.3 传递引用101

9.5.4 使用copy.deepcopy()复制列表101

9.5.5 random.shuffle()函数101

9.5.6 随机打乱字符串102

9.6 测试消息102

9.7 检查密码程序是否正常工作并

结束程序103

9.8 调用main()函数104

9.9 检验测试程序104

9.10 小结 104

9.11 习题 105

第 10章 文件的加密与解密106

10.1 纯文本文件106

10.2 使用置换密码加密文件的

源代码107

10.3 运行置换密码加密文件程序的

样例108

10.4 文件操作109

10.4.1 打开文件109

10.4.2 数据写入及文件关闭109

10.4.3 读取文件110

10.5 创建main()函数111

10.6 检查文件是否存在111

10.6.1 os.path.exists() 方法111

10.6.2 使用os.path.exists()方法检查

输入的文件是否存在112

10.7 使用字符串方法令用户的输入

灵活112

10.7.1 upper()、lower()和title()字符串

方法112

10.7.2 startswith()和endswith()方法113

10.7.3 在程序中使用上述字符串方法113

10.8 读取作为输入的文件114

10.9 计算加解密所需的时间114

10.9.1 time模块和time.time()方法114

10.9.2 在程序中使用time.time()方法115

10.10 将输出写入文件115

10.11 调用main()函数116

10.12 小结 116

10.13 习题 117

第 11章 编程检测英语文本118

11.1 计算机如何理解英语118

11.2 英语检测模块的源代码120

11.3 英语检测模块的运行示例121

11.4 指令和设置常量121

11.5 字典数据类型122

11.5.1 字典和列表之间的区别123

11.5.2 在字典中添加或 改项123

11.5.3 对字典使用len()函数124

11.5.4 对字典使用in运算符124

11.5.5 用字典检索项比用列表 快125

11.5.6 在字典上使用循环125

11.6 运行字典文件125

11.6.1 split()方法126

11.6.2 将字典文件分割成单个单词126

11.6.3 返回字典数据127

11.7 对消息中出现的英文单词进行

计数127

11.7.1 除数为零错误128

11.7.2 对匹配上的英语单词进行计数128

11.7.3 float()、int()和str()函数及整数

除法129

11.7.4 获得message中英语单词的

比例129

11.8 删除非字母字符130

11.8.1 append()列表方法130

11.8.2 创建字母组成的字符串131

11.9 检测英语单词131

11.9.1 使用默认参数132

11.9.2 计算百分比132

11.10 小结 134

11.11 习题 134

第 12章 破解置换密码136

12.1 破解置换密码程序的源代码136

12.2 运行破解置换密码程序的样例137

12.3 导入模块138

12.4 使用三引号的多行字符串138

12.5 展示破解密文的结果139

12.6 得到破解后的消息140

12.6.1 strip()字符串方法141

12.6.2 应用strip()字符串方法142

12.6.3 破解失败142

12.7 调用main()函数143

12.8 小结 143

12.9 习题 143

第 13章 仿射密码的模运算模块144

13.1 模运算144

13.2 模运算符145

13.3 寻找因子并计算 大公约数146

13.4 多重赋值147

13.5 欧几里得算法求 大公约数148

13.6 理解乘法和仿射密码的工作

原理149

13.6.1 为乘法密码选择有效的密钥150

13.6.2 仿射密码加密150

13.6.3 仿射密码解密151

13.6.4 计算模逆152

13.6.5 整数除法运算符152

13.7 Cryptomath模块的源代码153

13.8 小结 154

13.9 习题 154

第 14章 编写仿射密码155

14.1 仿射密码程序的源代码155

14.2 运行仿射密码程序的样例157

14.3 引入模块、设置常量并创建

main()函数157

14.4 计算并验证密钥158

14.4.1 元组数据类型159

14.4.2 检验弱密钥159

14.4.3 仿射密码共有多少种密钥组合160

14.5 编写加密函数162

14.6 编写解密函数163

14.7 生成随机密钥对164

14.8 调用main()函数164

14.9 小结 165

14.10 习题 165

第 15章 破解仿射密码166

15.1 仿射密码破解程序的源代码166

15.2 仿射密码破解程序的运行示例167

15.3 创建模块、常量和main()函数168

15.4 仿射密码破解函数169

15.4.1 乘方运算符169

15.4.2 计算可能密钥的总数169

15.4.3 continue语句170

15.4.4 使用continue跳过代码171

15.5 调用main()函数172

15.6 小结 172

15.7 习题 173

第 16章 编写简单代换密码174

16.1 简单代换密码的工作原理174

16.2 简单代换密码程序的源代码175

16.3 运行简单代换密码程序的样例177

16.4 引入模块、设置常量、创建

main()函数177

16.5 sort()列表方法179

16.6 包裹函数179

16.7 translateMessage()函数181

16.7.1 isupper()和islower()字符串

方法182

16.7.2 用isupper()保留字符原大小写

形式183

16.8 生成随机密钥184

16.9 调用main()函数184

16.10 小结 185

16.11 习题 185

第 17章 破解简单代换密码186

17.1 使用单词模式进行解密186

17.1.1 寻找单词模式187

17.1.2 寻找可能解密字母187

17.2 破解程序总览188

17.3 单词模式模块189

17.4 简单代换破解程序的源代码190

17.5 简单代换破解程序的运行示例193

17.6 创建模块和常量193

17.7 用正则表达式查找字符194

17.8 创建main()函数194

17.9 向用户显示破解结果195

17.10 创建密文映射195

17.10.1 创建空映射196

17.10.2 向映射添加字母196

17.10.3 取两个映射的交集197

17.10.4 字母映射辅助函数的工作

原理198

17.10.5 识别映射中已确定的明文

字母201

17.10.6 测试removeSolvedLetterFrom-

Mapping()函数203

17.11 hackSimpleSub()函数203

17.11.1 replace()字符串方法205

17.11.2 解密消息205

17.11.3 在交互式运行环境中进行

解密206

17.12 调用main()函数207

17.13 小结 208

17.14 习题 208

第 18章 编写维吉尼亚密码209

18.1 在维吉尼亚密码中使用多字母

密钥209

18.1.1 密钥越长,维吉尼亚密码越

安全211

18.1.2 选择一把抗字典攻击的密钥212

18.2 维吉尼亚密码实现程序的源

代码212

18.3 运行维吉尼亚密码实现程序的

样例214

18.4 引入模块、设置常量和创建

main()函数214

18.5 使用List-Append-Join模式

生成字符串215

18.6 消息的加密与解密216

18.7 调用main()函数218

18.8 小结 218

18.9 习题 219

第 19章 频率分析220

19.1 分析文本中的字母频率220

19.2 匹配字母频率222

19.2.1 计算简单代换密码的频率匹配

分数222

19.2.2 计算置换密码的频率匹配分数223

19.2.3 对维吉尼亚密码进行频率分析224

19.3 计算字母频率的源码224

19.4 以“ETAOIN”顺序保存字母226

19.5 对消息中的字母进行计数227

19.6 获取元组的第 一个成员228

19.7 将消息中的字母按频率大小

排序228

19.7.1 getLetterCount()完成字母

计数229

19.7.2 创建字典存储频率和字母列表229

19.7.3 按ETAOIN顺序排序字母列表230

19.7.4 字典列表按频率大小排序233

19.7.5 创建列表存储排序后的字母235

19.8 计算消息的频率匹配分数235

19.9 小结 236

19.10 习题 237

第 20章 破解维吉尼亚密码238

20.1 运用字典式攻击暴力破解维吉尼亚密码238

20.2 维吉尼亚密码字典式破解程序的

源代码238

20.3 维吉尼亚密码字典式破解程序的

运行样例239

20.4 关于维吉尼亚密码破解程序240

20.5 运用Kasiski检测确定密钥

长度240

20.5.1 找到重复序列240

20.5.2 求得间隔的因子241

20.5.3 提取字符串的每个第N位

字母242

20.5.4 使用频率分析法逐个破解

子密钥243

20.5.5 暴力破解可能密钥245

20.6 维吉尼亚密码破解程序的源

代码246

20.7 维吉尼亚密码破解程序的运行

样例251

20.8 引入模块、设置常量和创建

main()函数251

20.9 寻找重复序列252

20.10 求得间隔数的因子254

20.10.1 通过set()函数去除重复元素255

20.10.2 移除重复因子并对列表进行

排序256

20.10.3 找到出现次数 多的因子256

20.11 找到 可能的密钥长度258

20.11.1 extend()列表方法258

20.11.2 扩展repeatedSeqSpacings

字典259

20.11.3 从factorByCount中获取因子259

20.12 找到由相同子密钥加密的

字母260

20.13 尝 可能的密钥长度进行

解密261

20.13.1 print()的end关键字参数263

20.13.2 以沉默模式执行程序或打印

信息263

20.13.3 确定子密钥的可能组合264

20.13.4 以正确的大小写形式打印解密

后的文本267

20.14 返回破解后的消息268

20.14.1 找到可能密钥后跳出循环268

20.14.2 用其他所有可能密钥长度进行

暴力破解269

20.15 调用main()函数269

20.16 改变破解程序中的常量269

20.17 小结 270

20.18 习题 271

第 21章 一次一密272

21.1 不可破解的一次一密272

21.1.1 密钥长度等于消息长度272

21.1.2 使密钥真正随机274

21.1.3 避免两次一密274

21.2 为什么两次一密是维吉尼亚

密码275

21.3 小结 276

21.4 习题 276

第 22章 素数的查找与生成277

22.1 什么是素数277

22.2 素数模块的源代码279

22.3 素数模块的调用样例281

22.4 试除法的原理281

22.5 实现试除法检测283

22.6 埃拉托斯特尼筛法283

22.7 使用埃拉托斯特尼筛法生成

素数285

22.8 Rabin-Miller素性检测算法286

22.9 寻找大素数287

22.10 生成大素数288

22.11 小结 289

22.12 习题 289

第 23章 为公钥密码生成密钥290

23.1 公钥密码体制290

23.2 认证的问题291

23.2.1 数字签名292

23.2.2 谨防MITM攻击293

23.3 生成公钥和私钥的步骤293

23.4 公钥生成程序的源代码294

23.5 公钥生成程序的示例运行295

23.6 创建main()函数296

23.7 通过generateKey()函数生成

密钥297

23.7.1 计算e的值297

23.7.2 计算d的值298

23.7.3 返回公私钥对298

23.8 通过makeKeyFiles()函数创建

密钥文件299

23.9 调用main()函数300

23.10 混合密码体制301

23.11 小结 301

23.12 习题 301

第 24章 编写公钥密码算法302

24.1 公钥密码算法的实现原理302

24.1.1 分组的创建302

24.1.2 字符串转换为分组303

24.1.3 公钥密码算法进行加解密的

数学原理305

24.1.4 分组转换为字符串306

24.1.5 为什么不能破解公钥密码307

24.2 实现公钥密码算法的源代码309

24.3 公钥密码算法实现程序的运行

样例312

24.4 程序的设置313

24.5 程序如何判断加解密314

24.6 通过getBlockFromText()函数

将字符串转换为分组315

24.6.1 min()函数及max()函数315

24.6.2 将分组存储在blockInt中316

24.7 使用getTextFromBlocks()进行

解密317

24.7.1 使用insert()列表方法318

24.7.2 将消息列表合并为一个字符串318

24.8 编写encryptMessage()函数319

24.9 编写decryptMessage()函数319

24.10 从密钥文件中读取公钥和

私钥320

24.11 将加密的内容写入文件321

24.12 解密文件中的信息323

24.13 调用main()函数324

24.14 小结 324

附录 调试Python代码326

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值