JavaWeb开发环境18
2.2.1下载Tomcat18
2.2.2安装Tomcat19
2.2.3在Eclipse中配置Tomcat20
2.2.4第一个Eclipse下的JSP工程21
2.2.5第一个JavaBean工程25
2.3使用JNI30
2.4Java密码开发的两个主流国际库35
2.5准备密码库OpenSSL36
2.5.1OpenSSL源代码模块结构36
2.5.2OpenSSL加密库调用方式37
2.5.3OpenSSL支持的对称加密算法38
2.5.4OpenSSL支持的非对称加密算法38
2.5.5OpenSSL支持的信息摘要算法38
2.5.6OpenSSL密钥和证书管理38
2.5.7面向对象与OpenSSL39
2.5.8BIO接口40
2.5.9EVP接口41
2.5.10关于版本和操作系统42
2.5.11在Windows下编译OpenSSL1.1.142
2.5.12在Windows下编译OpenSSL1.0.2m54
2.5.13测试使用OpenSSL命令62
2.6在Java下使用OpenSSL64
2.6.1以命令方式使用OpenSSL64
2.6.2以函数库方式调用OpenSSL67
2.7纯Java密码开发库72
2.7.1JCA的基本概念73
2.7.2JCA的设计原则74
2.7.3JCA中的密码服务提供者74
2.7.4JCA编程的两大安全包76
2.7.5包java.security中的接口和类77
2.7.6包javax.crypto中的接口和类83
2.7.7第一个JCA例子84
第3章对称密码算法原理89
3.1基本概念89
3.2对称加解密算法的分类90
3.3流加密算法90
3.3.1基本概念90
3.3.2流密码和分组密码的比较91
3.3.3RC4算法91
3.4分组加密算法95
3.4.1工作模式95
3.4.2短块加密99
3.4.3DES和3DES算法100
3.4.4SM4算法118
第4章利用JCA/JCE对称加解密139
4.1包java.security140
4.1.1密钥接口140
4.1.2安全随机数141
4.2包javax.crypto150
4.2.1安全密钥接口SecretKey151
4.2.2密钥生成类KeyGenerator151
4.2.3密钥规范类SecretKeySpec155
4.2.4初始向量类IvParameterSpec156
4.2.5加解密类Cipher157
4.2.6利用JCA实现DES加密160
第5章杂凑函数和HMAC181
5.1杂凑函数概述181
5.1.1什么是杂凑函数181
5.1.2密码学和杂凑函数概述182
5.1.3杂凑函数的发展182
5.1.4杂凑函数的设计183
5.1.5杂凑函数的分类183
5.1.6杂凑函数的碰撞183
5.2SM3杂凑算法184
5.2.1SM3算法概述184
5.2.2SM3算法的特点184
5.2.3常量和函数184
5.2.4填充185
5.2.5迭代压缩185
5.2.6杂凑值186
5.2.7一段式SM3算法的实现187
5.2.8三段式SM3杂凑的实现194
5.2.9Java和OpenSSL1.1.1b联合实现SM3算法198
5.3MD5消息摘要算法201
5.3.1MD5算法概述202
5.3.2MD5算法的特点202
5.3.3MD5是否属于加密算法202
5.3.4MD5用途202
5.3.5MD5算法原理203
5.3.6手工实现MD5算法204
5.3.7基于Java消息摘要类实现MD5算法211
5.4HMAC213
5.4.1什么是HMAC213
5.4.2HMAC产生的背景214
5.4.3HMAC在身份认证中的应用214
5.4.4设计目标215
5.4.5算法描述215
5.4.6手工实现HMAC-MD5216
5.4.7基于JavaMac类实现HMAC-MD5219
5.4.8实现HMAC-SM3222
5.5更通用的基于OpensSSL的哈希运算226
5.6SHA系列杂凑算法232
5.6.1SHA算法概述232
5.6.2SHA系列算法核心思想和特点233
5.6.3SHA256算法原理解析233
5.6.4SHA256算法核心思想235
5.6.5SHA256算法的实现240
第6章密码学中常见的编码格式249
6.1Base64编码249
6.1.1概述249
6.1.2Base64编码的由来249
6.1.3Base64的索引表249
6.1.4Base64的转化原理250
6.1.5使用OpenSSL的base64命令252
6.1.6Java编程实现Base64编解码253
6.2PEM文件258
6.2.1什么是PEM文件258
6.2.2生成一个PEM文件260
6.3ASN.1及其编解码261
6.3.1ASN.1的基本概念261
6.3.2ASN.1的编码格式262
6.3.3ASN的优点262
6.3.4基本语法规则263
6.3.5ASN.1数据类型263
6.3.6ASN.1实例266
第7章非对称算法RSA的加解密274
7.1非对称密码体制概述274
7.2RSA概述276
7.3RSA的数学基础276
7.3.1素数276
7.3.2素性检测276
7.3.3倍数277
7.3.4约数277
7.3.5互质数277
7.3.6质因数277
7.3.7强素数277
7.3.8因子278
7.3.9模运算278
7.3.10模运算的操作与性质279
7.3.11单向函数279
7.3.12费马定理和欧拉定理280
7.3.13幂与模幂运算280
7.3.14同余符号≡280
7.3.15欧拉函数281
7.3.16最大公约数281
7.3.17欧几里得算法282
7.3.18扩展欧几里得算法284
7.4RSA算法描述292
7.5RSA算法实例293
7.5.1查找法计算d293
7.5.2简便法计算私钥d295
7.5.3扩展欧几里得计算私钥d297
7.5.4加密字母298
7.5.5分组加密字符串298
7.6RSA加密长度限制问题302
7.7熟悉PKCS#1303
7.7.1PKCS#1填充304
7.7.2PKCS#1中的RSA私钥语法308
7.8在OpenSSL命令中使用RSA309
7.8.1生成RSA公私钥309
7.8.2提取私钥参数311
7.8.3利用RSA公钥加密一个文件312
7.8.4利用私钥解密一个文件313
7.9基于OpenSSL库的JavaRSA实现314
7.9.1OpenSSL的RSA实现314
7.9.2主要数据结构315
7.9.3主要函数316
7.10随机大素数的生成332
7.11Java中的大数表示333
7.12基于大素数的RSA算法Java实现334
7.13基于JCA的RSA算法实现339
7.13.1密钥对类KeyPair340
7.13.2密钥对生成类KeyPairGenerator340
7.13.3密钥工厂类KeyFactory342
7.14RSA算法的攻击及分析348
7.14.1因子分解攻击348
7.14.2选择密文攻击348
7.14.3公共模数攻击348
7.14.4小指数攻击349
第8章数字签名技术350
8.1概述350
8.2什么是数字签名技术351
8.2.1签名351
8.2.2数字签名基本概念352
8.2.3数字签名的原理352
8.2.4数字签名的一般性定义353
8.2.5数字签名的分类354
8.2.6数字签名的安全性355
8.2.7数字签名的特征与应用356
8.3RSA公钥算法在数字签名中的应用356
8.4利用OpenSSL命令进行签名验签357