
本书主要介绍了密码编码学与信息安全的常用算法所涉及的理论,并介绍了使用C++语言实现这些算法的基本过程与具体实现。本书涵盖了古典密码、对称密钥算法、公钥算法、散列函数和数字签名等几部分内容,并在每章最后附有一定量的习题与实践题供读者练习。
本书可以作为信息安全、信息与计算科学、计算机科学技术、通信工程等专业的本科生教材,也可以为从事信息安全、通信、电子工程等领域的技术人员提供参考。
1. 目的/目标
在密码编码与信息安全的教学与学习过程中,大多以理论教学为主,缺少实践教学,从而对所学的理论难以有较为深入的理解。本书重在以实践帮助读者理解密码编码与信息安全的基本原理。
本书主要讨论密码编码学与信息安全的基本原理,并以基本原理为基础,重在探讨C++的实现方法。通过逐步引导的方法,分析密码编码和信息安全的功能,并针对相应的功能采用C++语言加以实现。帮助读者掌握和理解密码编码与信息安全的原理,并将理论与实践有机结合,为对密码编码和信息安全有兴趣的读者提供参考。
2. 预备知识要求
本书主要讲述密码编码与信息安全的基本原理与实现方法,读者需有基本的C++语言知识,并能够编写简单的应用程序。若有基本的密码编码与信息安全的知识,则更有利于掌握书中的内容。
3. 学习方法
本书是以实践为主,帮助理解密码编码与信息安全的基本原理,从原理出发来分析和完成具体的实现方法与过程是理想的学习方法,切忌复制或抄袭代码,理解后独立完成相关实践内容,不仅有助于理解密码编码的原理,更有助于将理论转化为实践。
在本书的撰写过程中,每一部分的原理都通过分析和实践来完成,同时,将复杂的问题尽可能简化到易于理解,便于实现。读者在学习过程中,可以参考分解问题的方法,提高解决问题的能力。同时在程序设计过程中最好对各项功能进行单独测试,避免在总体完成后增大查找程序存在问题的复杂性。
4. 内容提要
本书共分为古典密码、现代对称密码、公钥密码算法、散列函数和数字签名五个部分,在古典密码中介绍了单表代替密码、移位密码、多表代替密码等古典密码算法。在现代对称密码中介绍了SDES算法、DES算法、AES算法、IDEA算法、Blowfish算法和CAST128等多种算法。在公钥密码算法中介绍了大数运算基本原理与实现方法、RSA算法、DiffieHellman算法、Elgamal算法等。在散列函数中介绍了MD4、MD5和SHA1等算法。在数字签名中介绍了RSA数字签名方案、Elgamal数字签名方案和DSA数字签名方案等。并对书中出现的各种算法均给出了C++的具体实现5. 教学安排
本书作为教材可以根据教学学时安排具体内容,对于课时在60学时左右的教学计划可以选择大部分内容作为课程教学内容,对于课时在40学时左右的教学计划可以根据需要进行选择。例如:在第2部分内容中可以按照分类各选择一种算法作为教学内容,其中RC算法包含RC4、RC5和RC6算法,教学过程中则可以选择部分内容进行讲解,其余部分则可以作为教学参考。同样第4部分的散列算法也可以选择部分内容进行教学,算法细节不同,但基本结构有不少是相似的。
6. 错误
无论作者有多少发现错误的技巧,总有一些错误漏网,而读者往往最能发现错误,如果读者发现任何认为是错误的地方,请提出纠正建议,并发送电子邮件至 wang_jingwen@yeah.net,我们会非常感谢读者的帮助。
7. 编程环境
本书中的所有示例均采用G++编译器进行编译,编程环境为Code∷Blocks,保证了在Windows环境或Linux环境的兼容性,Code∷Blocks的下载网址为:http://www.codeblocks.org。若读者在Windows环境中使用VC进行处理,需做相应的修改以适应VC的编译器。
8. 致谢
本书在撰写过程中得到很多人的支持和帮助,特别要感谢何立国教授,对书中许多有关数学知识与相关证明的地方给出了很多宝贵的建议,使得本书更加完善。
编者2015年3月
第1章概述1
1.1密码学简介1
1.2信息安全遇到的威胁3
1.3密码编码和信息安全提供的服务4
1.4习题5
第1部分古 典 密 码
第2章古典密码编码技术9
2.1单表代替密码9
2.1.1单表代替密码编码原理9
2.1.2单表代替密码算法实现9
2.2移位密码12
2.2.1移位密码算法原理12
2.2.2移位密码算法实现12
2.3乘数密码13
2.3.1乘数密码算法原理13
2.3.2扩展的欧几里得算法14
2.3.3乘数密码算法实现17
2.3.4扩展的欧几里得算法的实现18
2.4多表代替密码19
2.4.1维吉尼亚密码原理20
2.4.2维吉尼亚密码实现21
2.4.3希尔密码的原理24
2.4.4希尔密码的实现26
2.5习题与实践题30
2.5.1习题30
2.5.2实践题31
第2部分现代对称密码
第3章SDES算法35
3.1SDES算法原理35
3.2SDES密钥的生成35
3.3SDES加密与解密过程36
3.4SDES算法实现39
3.5Feistel密码结构46
3.6习题与实践题47
3.6.1习题47
3.6.2实践题48
第4章DES算法49
4.1DES算法原理49
4.2DES密钥生成50
4.3DES算法加密过程51
4.4DES算法实现54
4.4.1初始化数据56
4.4.2生成子密钥59
4.4.3加密和解密61
4.5DES算法的变种65
4.5.1三重DES算法66
4.5.2独立子密钥的DES算法66
4.6习题与实践题66
4.6.1习题66
4.6.2实践题67
第5章AES算法68
5.1置换组合结构68
5.2AES算法原理69
5.3AES密钥生成74
5.4AES算法实现77
5.4.1数据初始化79
5.4.2轮密钥计算83
5.4.3AES加密过程的实现86
5.4.4AES解密过程的实现90
5.5习题与实践题92
5.5.1习题92
5.5.2实践题92
第6章IDEA算法93
6.1IDEA算法原理93
6.1.1IDEA算法的基本结构93
6.1.2IDEA算法的加密过程93
6.1.3子密钥的生成95
6.2IDEA算法实现96
6.2.1数据初始化97
6.2.2密钥生成98
6.2.3加密过程和解密过程的实现101
6.2.4程序测试103
6.3习题与实践题104
6.3.1习题104
6.3.2实践题105
第7章Blowfish算法106
7.1Blowfish算法原理106
7.1.1Blowfish算法的加解密过程106
7.1.2Blowfish算法的密钥生成107
7.2Blowfish算法实现108
7.2.1加密和解密的实现109
7.2.2数据初始化111
7.2.3程序测试117
7.3习题与实践题118
7.3.1习题118
7.3.2实践题118
第8章CAST128算法119
8.1CAST128算法原理119
8.1.1CAST128算法的加密过程119
8.1.2CAST128算法的子密钥生成120
8.2CAST128算法实现122
8.2.1密钥生成123
8.2.2加密和解密127
8.2.3数据初始化和程序测试130
8.3习题与实践题139
8.3.1习题139
8.3.2实践题139
第9章分组密码模式140
9.1电子密码本模式140
9.2密码分组链接模式141
9.3明文密码分组链接模式142
9.4密码反馈模式142
9.5输出反馈模式144
9.6计数器模式145
9.7填充146
9.8习题与实践题148
9.8.1习题148
9.8.2实践题148
第10章A5算法149
10.1序列密码原理149
10.1.1基本原理149
10.1.2线性反馈移位寄存器150
10.2A5/1算法原理152
10.3A5/1算法实现154
10.3.1A5/1算法实现的基本结构154
10.3.2A5/1算法具体实现156
10.3.3测试160
10.4习题与实践题161
10.4.1习题161
10.4.2实践题161
第11章RC4算法163
11.1RC4算法原理163
11.2RC4算法实现165
11.2.1RC4算法实现的基本结构165
11.2.2初始化166
11.2.3加密和解密168
11.2.4RC4算法测试169
11.3习题与实践题171
11.3.1习题171
11.3.2实践题171
第12章RC5算法172
12.1RC5算法原理172
12.1.1RC5加密和解密的基本原理172
12.1.2RC5密钥生成173
12.2RC5算法实现175
12.2.1RC5算法实现的基本结构175
12.2.2密钥生成176
12.2.3加密和解密过程的实现178
12.2.4RC5算法测试179
12.3习题与实践题180
12.3.1习题180
12.3.2实践题180
第13章RC6算法181
13.1RC6算法原理181
13.1.1RC6算法的加密和解密181
13.1.2RC6算法的密钥生成182
13.2RC6算法实现183
13.2.1RC6算法实现的基本结构183
13.2.2密钥生成185
13.2.3加密和解密的实现186
13.2.4RC6算法测试188
13.3习题与实践题190
13.3.1习题190
13.3.2实践题190
第3部分公钥密码算法
第14章RSA算法193
14.1基础知识193
14.1.1计算复杂性理论193
14.1.2中国剩余定理194
14.1.3Euler函数195
14.1.4Euler定理和Fermat小定理195
14.1.5模运算196
14.2素数与素性测试197
14.2.1RabinMiller素性检测法198
14.2.2SolovagStrassen素性检测法199
14.2.3Lehmann素性检测法201
14.2.4AKS素性检测法202
14.3大数运算203
14.3.1大数运算的基本方法203
14.3.2基于32位进制的大数运算方法203
14.4RSA公钥密码算法原理208
14.5RSA公钥加密算法实现209
14.5.1大数运算的实现209
14.5.2素性检测的实现230
14.5.3RSA算法的实现234
14.5.4RSA加密算法测试238
14.6习题与实践题239
14.6.1习题239
14.6.2实践题239
第15章DiffieHellman密钥交换算法243
15.1DiffieHellman算法原理243
15.1.1DiffieHellman密钥交换算法基础243
15.1.2DiffieHellman密钥交换算法计算过程244
15.2DiffieHellman算法实现246
15.2.1生成素数p248
15.2.2本原根的生成249
15.2.3密钥生成251
15.2.4DiffieHellman算法测试253
15.3习题与实践题254
15.3.1习题254
15.3.2实践题254
第16章Elgamal加密算法255
16.1Elgamal加密算法原理255
16.2Elgamal加密算法实现256
16.2.1密钥的生成与解密的实现256
16.2.2加密的实现262
16.2.3算法测试265
16.3习题与实践题267
16.3.1习题267
16.3.2实践题267
第4部分散 列 函 数
第17章MD4算法与MD5算法271
17.1散列算法基础271
17.1.1散列算法的基本概念271
17.1.2散列算法的使用方法273
17.2MD4算法原理275
17.3MD4算法实现278
17.3.1MD4算法实现的基本结构278
17.3.2数据初始化280
17.3.3辅助函数的实现281
17.3.4哈希值计算过程的实现284
17.3.5测试与输出287
17.4MD5算法原理289
17.5MD5算法实现291
17.5.1MD5算法实现的基本结构291
17.5.2数据初始化293
17.5.3辅助函数的实现293
17.5.4哈希值计算过程的实现295
17.5.5测试与输出297
17.6习题与实践题298
17.6.1习题298
17.6.2实践题298
第18章SHA1算法299
18.1SHA1算法原理299
18.2SHA1算法实现302
18.2.1SHA1算法实现的基本结构302
18.2.2数据初始化303
18.2.3哈希值计算过程的实现305
18.2.4测试与输出309
18.3习题与实践题310
18.3.1习题310
18.3.2实践题310
第19章RIPEMD160算法311
19.1RIPEMD160算法原理311
19.2RIPEMD160算法实现314
19.2.1RIPEMD160算法实现的基本结构314
19.2.2数据初始化316
19.2.3辅助函数的实现317
19.2.4哈希值计算过程的实现320
19.2.5测试与输出325
19.3习题与实践题327
19.3.1习题327
19.3.2实践题327
第5部分数 字 签 名
第20章数字签名331
20.1数字签名概述331
20.2RSA数字签名方案332
20.3Elgamal数字签名方案333
20.4DSA数字签名方案335
20.5盲签名337
20.5.1盲签名基本原理337
20.5.2RSA盲签名338
20.6习题与实践题338
20.6.1习题338
20.6.2实践题339
参考文献340