前言 1
绪论 1
第1章位和字节 1
1.1 一般运算 1
1.1.1数的基数 1
目录 1
1.1.2位和字节 3
1.1.3有符号字节 3
1.1.4位运算符 4
1.1.5字群压缩 9
1.1.6整数和结尾表示法 10
1.2 Java数值 11
1.2.1基本类型 11
1.2.3使用字节 19
1.2.4 BigInteger 24
2.1.1 密码特性 29
第2章保密密钥 29
2.1对称分组密码 29
2.1.2常用的分组密码 32
2.1.3不应使用的密码 39
2.1.4填充 41
2.1.5运算模式 42
2.1.6电子密码本模式(ECB) 43
2.1.7密码分组链接模式(CBC) 44
2.1.8密钥包装 50
2.1.9把密码转变成密钥 52
2.2散列 53
2.2.1 密码散列 54
2.2.2运算法则 57
2.2.3散列函数标准和实践 60
2.3散列式信息鉴定代码(HMAC) 61
2.3.1 标准HMAC 62
2.4小结 63
2.3.2 HMAC标准和实践 63
第3章公开密钥 65
3.1公开密钥密码 65
3.1.1 其他系统 66
3.2公开密钥安全性分类 67
3.3数学基础 69
3.3.1 素数 69
3.3.2初等数值理论 74
3.4公开密钥加密和主要PKCS分类 76
3.4.1 RSA和整数因子分解 77
3.4.2离散对数系统 84
3.4.3椭圆曲线 89
3.4.4其他公开密钥密码系统 95
3.5小结 97
第4章 随机数 99
4.1随机和安全性 101
4.1.1随机性实验 102
4.2.1密码系统PRNG 103
4.2伪随机数发生器 103
4.2.2流密码 105
4.3使用随机性 106
4.3.1游戏随机数的生成 106
4.3.2生成某个范围内的随机数 107
4.3.3洗牌 109
4.3.4生成随机排列 111
4.3.5随机取样 112
4.4访问熵 114
4.4.1操作系统服务 114
4.4.2 “用户方”服务 116
4.4.3 TrueRand库 120
4.4.4远程服务 120
4.5Java和随机数 122
4.5.1 类Random和SecureRandom 122
4.5.2开发者问题 125
4.5.3重新设置种子 126
4.5.4收集熵 127
第5章Java密码学 137
5.1组织方式 138
5.1.1提供者和引擎类 139
5.1.2参数、密钥和证书 140
5.1 .3错误处理 140
5.2提供者 141
5.2.1标准名称 141
5.2.2标准Sun和SunJCE提供者 144
5.2.3其他提供者 144
5.2.4初始化提供者 145
5.2.5编写自己的提供者 146
5.3核心引擎类 146
5.3.1 MessageDigest 147
5.3.2MAC 148
5.3.3 SecureRandom 150
5.3.4 Cipher 152
5.3.5Signature 157
5.3.6密钥一致协议 159
5.4参数、密钥和证书 160
5.4.1算法参数 160
5.4.2密钥 163
5.5小结 175
第6章 短消息编码和加密 177
6.1预处理 177
6.1.1把数字转换成字节 177
6.1.2把7位数据压缩成8位 179
6.1.3通用压缩和java.util.zip.Deflater 180
6.1.4添加奇偶校验位 182
6.2短消息加密 184
6.2.1单分组加密 184
6.3短消息编码 187
6.3.1对客户所用数据编码 187
6.3.2机器和客户可见的应用程序的编码 202
7.1加密数据的数据库框架 213
第7章 应用程序和数据框架 213
7.1.1选择密码 215
7.1.2数据 216
7.1.3查找、索引和约束 221
7.1.4不对称数据的使用 224
7.1.5空值和数据库应用程序 225
7.2.Java中的安全内存管理 227
7.2.1灵巧的数组类 227
7.2.3使用类SecureRandom 231
7.2.2字符数组 231
7.3保密密钥管理 232
7.3.1保密密钥数据 232
7.3.2密钥的生产 234
7.3.3对密钥的加密 235
7.3.4存储 235
7.3.5密钥访问和分发 236
7.3.6通过Cipher、MAC使用密钥 236
7.4.1 启动口令 240
7.4口令 240
7.4.2成员名和口令 242
7.5 日志 245
7.5.1嵌入式加密日志 246
7.5.2完全加密的日志文件 246
7.5.3公开密钥日志文件 248
7.5.4拆分日志文件 248
7.5.5基于网络的日志 248
7.6密钥记号和应用程序 249
7.6.1记号设计 249
7.6.2 URL记号 251
7.6.3 Cookie记号 263
7.6.4访问控制记号 265
7.7小数值和货币值的计算 266
7.7.1双精度值和浮点值 267
7.7.2 BigDecimal 268
附录A Java密码类参考 271