C# 规范 2.0 版
以下为文档目录内容。同V1.2,可以在VS2005安装目录中查找C# Language Specification 2.0.doc,即可查找得到该文档。
19. C# 2.0 简介 1
19.1 泛型 1
19.1.1 为什么要使用泛型? 1
19.1.2 创建和使用泛型 2
19.1.3 泛型类型实例化 3
19.1.4 约束 4
19.1.5 泛型方法 5
19.2 匿名方法 6
19.2.1 方法组转换 8
19.3 迭代器 8
19.4 分部类型 11
19.5 可空类型 12
20. 泛型 15
20.1 泛型类声明 15
20.1.1 类型形参 15
20.1.2 实例类型 16
20.1.3 基规范 17
20.1.4 泛型类的成员 17
20.1.5 泛型类中的静态字段 18
20.1.6 泛型类中的静态构造函数 18
20.1.7 访问受保护成员 19
20.1.8 泛型类中的重载 19
20.1.9 形参数组方法和类型形参 20
20.1.10 重写和泛型类 20
20.1.11 泛型类中的运算符 21
20.1.12 泛型类中的嵌套类型 22
20.1.13 应用程序入口点 23
20.2 泛型结构声明 23
20.3 泛型接口声明 23
20.3.1 所实现接口的唯一性 23
20.3.2 显式接口成员实现 24
20.4 泛型委托声明 25
20.5 构造类型 25
20.5.1 类型实参 26
20.5.2 开放和封闭类型 26
20.5.3 构造类型的基类和接口 27
20.5.4 构造类型的成员 27
20.5.5 构造类型的可访问性 28
20.5.6 转换 28
20.5.7 using 别名指令 29
20.5.8 属性 29
20.5.9 数组和泛型 IList 接口 29
20.6 泛型方法 30
20.6.1 泛型方法签名 31
20.6.2 虚泛型方法 31
20.6.3 调用泛型方法 33
20.6.4 类型实参推断 33
20.6.5 语法多义性 35
20.6.6 通过委托使用泛型方法 35
20.6.7 不能是泛型的成员 36
20.7 约束 36
20.7.1 满足约束 40
20.7.2 类型形参上的成员查找 41
20.7.3 类型形参和装箱 41
20.7.4 涉及类型形参的转换 42
20.8 表达式和语句 44
20.8.1 对象创建表达式 44
20.8.2 typeof 运算符 44
20.8.3 引用相等运算符 45
20.8.4 is 运算符 46
20.8.5 as 运算符 46
20.8.6 异常语句 46
20.8.7 lock 语句 46
20.8.8 using 语句 46
20.8.9 foreach 语句 46
20.9 查找规则的修改 47
20.9.1 命名空间和类型名称 47
20.9.2 成员查找 49
20.9.3 适用函数成员 50
20.9.4 更好的函数成员 50
20.9.5 简单名称 51
20.9.6 成员访问 52
20.9.7 方法调用 54
20.10 右移语法变化 55
21. 匿名方法 57
21.1 匿名方法表达式 57
21.2 匿名方法签名 57
21.3 匿名方法转换 57
21.4 匿名方法块 59
21.5 外层变量 59
21.5.1 捕获的外层变量 59
21.5.2 局部变量实例化 60
21.6 匿名方法计算 62
21.7 委托实例相等性 63
21.8 明确赋值 63
21.9 方法组转换 64
21.10 委托创建表达式 65
21.11 实现示例 65
22. 迭代器 69
22.1 迭代器块 69
22.1.1 枚举器接口 69
22.1.2 可枚举接口 69
22.1.3 产生类型 69
22.1.4 this 访问 70
22.2 枚举器对象 70
22.2.1 MoveNext 方法 70
22.2.2 Current 属性 71
22.2.3 Dispose 方法 71
22.3 可枚举对象 72
22.3.1 GetEnumerator 方法 72
22.4 yield 语句 72
22.4.1 明确赋值 74
22.5 实现示例 74
23. 分部类型 81
23.1 分部声明 81
23.1.1 属性 81
23.1.2 修饰符 82
23.1.3 类型参数和约束 82
23.1.4 基类 82
23.1.5 基接口 83
23.1.6 成员 83
23.2 名称绑定 84
24. 可空类型 85
24.1 可空类型 85
24.1.1 成员 85
24.1.2 默认值 86
24.1.3 值类型约束 86
24.2 转换 86
24.2.1 null 文本转换 86
24.2.2 可空转换 86
24.2.3 装箱和取消装箱转换 87
24.2.4 允许的用户定义转换 87
24.2.5 用户定义转换的计算 88
24.2.6 提升的转换 88
24.2.7 用户定义的隐式转换 88
24.2.8 用户定义的显式转换 89
24.3 表达式 90
24.3.1 提升运算符 90
24.3.2 允许的用户定义运算符 91
24.3.3 运算符重载解析 91
24.3.4 相等操作符和空 91
24.3.5 is 运算符 91
24.3.6 as 运算符 92
24.3.7 复合赋值 92
24.3.8 bool? 类型 92
24.3.9 空合并运算符 93
25. 其他功能 95
25.1 属性访问器的可访问性 95
25.1.1 访问器声明 95
25.1.2 访问器的使用 96
25.1.3 重写和接口实现 97
25.2 静态类 97
25.2.1 静态类声明 97
25.2.2 引用静态类类型 98
25.3 命名空间别名限定符 98
25.3.1 限定的别名成员 100
25.3.2 别名的唯一性 101
25.4 Extern 别名 102
25.4.1 Extern 别名指令 103
25.5 Pragma 指令 104
25.5.1 Pragma warning 105
25.6 默认值表达式 105
25.7 条件属性类 106
25.8 固定大小缓冲区 107
25.8.1 固定大小缓冲区的声明 107
25.8.2 表达式中的固定大小缓冲区 108
25.8.3 Fixed 语句 109
25.8.4 明确赋值检查 109
C# 语言规范 1.2 版
以下是内容,如果你已经安装VS2005,则在安装目录中查找C# Language Specification 1.2.doc,即可。
目录
1. 简介 1
1.1 Hello world 1
1.2 程序结构 2
1.3 类型和变量 4
1.4 表达式 6
1.5 语句 8
1.6 类和对象 11
1.6.1 成员 12
1.6.2 可访问性 12
1.6.3 基类 13
1.6.4 字段 13
1.6.5 方法 14
1.6.5.1 参数 14
1.6.5.2 方法体和局部变量 15
1.6.5.3 静态方法和实例方法 16
1.6.5.4 虚方法、重写方法和抽象方法 17
1.6.5.5 方法重载 19
1.6.6 其他函数成员 20
1.6.6.1 构造函数 21
1.6.6.2 属性 21
1.6.6.3 索引器 22
1.6.6.4 事件 22
1.6.6.5 运算符 23
1.6.6.6 析构函数 23
1.7 结构 24
1.8 数组 25
1.9 接口 26
1.10 枚举 27
1.11 委托 28
1.12 属性 29
2. 词法结构 31
2.1 程序 31
2.2 文法 31
2.2.1 文法表示法 31
2.2.2 词法文法 32
2.2.3 句法文法 32
2.3 词法分析 32
2.3.1 行结束符 33
2.3.2 注释 33
2.3.3 空白 35
2.4 标记 35
2.4.1 Unicode 字符转义序列 35
2.4.2 标识符 36
2.4.3 关键字 38
2.4.4 文本 38
2.4.4.1 布尔值 38
2.4.4.2 整数 38
2.4.4.3 实数 40
2.4.4.4 字符 40
2.4.4.5 字符串 41
2.4.4.6 空文本 43
2.4.5 运算符和标点符号 43
2.5 预处理指令 43
2.5.1 条件编译符号 44
2.5.2 预处理表达式 45
2.5.3 声明指令 45
2.5.4 条件编译指令 46
2.5.5 诊断指令 49
2.5.6 区域指令 49
2.5.7 行指令 50
3. 基本概念 51
3.1 应用程序启动 51
3.2 应用程序终止 52
3.3 声明 52
3.4 成员 54
3.4.1 命名空间成员 54
3.4.2 结构成员 54
3.4.3 枚举成员 55
3.4.4 类成员 55
3.4.5 接口成员 55
3.4.6 数组成员 55
3.4.7 委托成员 55
3.5 成员访问 56
3.5.1 已声明可访问性 56
3.5.2 可访问域 57
3.5.3 实例成员的受保护访问 59
3.5.4 可访问性约束 59
3.6 签名和重载 60
3.7 范围 61
3.7.1 名称隐藏 63
3.7.1.1 通过嵌套隐藏 63
3.7.1.2 通过继承隐藏 64
3.8 命名空间和类型名称 65
3.8.1 完全限定名 66
3.9 自动内存管理 67
3.10 执行顺序 69
4. 类型 71
4.1 值类型 71
4.1.1 System.ValueType 类型 72
4.1.2 默认构造函数 72
4.1.3 结构类型 73
4.1.4 简单类型 73
4.1.5 整型 74
4.1.6 浮点型 75
4.1.7 decimal 类型 76
4.1.8 bool 类型 76
4.1.9 枚举类型 77
4.2 引用类型 77
4.2.1 类类型 77
4.2.2 对象类型 78
4.2.3 string 类型 78
4.2.4 接口类型 78
4.2.5 数组类型 78
4.2.6 委托类型 78
4.3 装箱和拆箱 79
4.3.1 装箱转换 79
4.3.2 拆箱转换 80
5. 变量 81
5.1 变量类别 81
5.1.1 静态变量 81
5.1.2 实例变量 81
5.1.2.1 类中的实例变量 81
5.1.2.2 结构中的实例变量 82
5.1.3 数组元素 82
5.1.4 值参数 82
5.1.5 引用参数 82
5.1.6 输出参数 82
5.1.7 局部变量 83
5.2 默认值 83
5.3 明确赋值 84
5.3.1 初始已赋值变量 84
5.3.2 初始未赋值变量 85
5.3.3 确定明确赋值的细则 85
5.3.3.1 一般语句规则 85
5.3.3.2 块语句、checked 和 unchecked 语句 86
5.3.3.3 表达式语句 86
5.3.3.4 声明语句 86
5.3.3.5 if 语句 86
5.3.3.6 switch 语句 87
5.3.3.7 while 语句 87
5.3.3.8 do 语句 87
5.3.3.9 for 语句 87
5.3.3.10 break、continue 和 goto 语句 88
5.3.3.11 throw 语句 88
5.3.3.12 return 语句 88
5.3.3.13 try-catch 语句 88
5.3.3.14 try-finally 语句 88
5.3.3.15 try-catch-finally 语句 89
5.3.3.16 foreach 语句 90
5.3.3.17 using 语句 90
5.3.3.18 lock 语句 90
5.3.3.19 简单表达式的一般规则 90
5.3.3.20 带有嵌入表达式的表达式的一般规则 91
5.3.3.21 调用表达式和对象创建表达式 91
5.3.3.22 简单赋值表达式 91
5.3.3.23 && 表达式 92
5.3.3.24 || 表达式 92
5.3.3.25 ! 表达式 93
5.3.3.26 ?: 表达式 93
5.4 变量引用 94
5.5 变量引用的原子性 94
6. 转换 95
6.1 隐式转换 95
6.1.1 标识转换 95
6.1.2 隐式数值转换 95
6.1.3 隐式枚举转换 96
6.1.4 隐式引用转换 96
6.1.5 装箱转换 97
6.1.6 隐式常量表达式转换 97
6.1.7 用户定义的隐式转换 97
6.2 显式转换 97
6.2.1 显式数值转换 97
6.2.2 显式枚举转换 99
6.2.3 显式引用转换 99
6.2.4 拆箱转换 100
6.2.5 用户定义的显式转换 100
6.3 标准转换 100
6.3.1 标准隐式转换 100
6.3.2 标准显式转换 101
6.4 用户定义的转换 101
6.4.1 允许的用户定义转换 101
6.4.2 用户定义的转换的计算 101
6.4.3 用户定义的隐式转换 102
6.4.4 用户定义的显式转换 102
7. 表达式 105
7.1 表达式的分类 105
7.1.1 表达式的值 106
7.2 运算符 106
7.2.1 运算符的优先级和顺序关联性 106
7.2.2 运算符重载 107
7.2.3 一元运算符重载决策 108
7.2.4 二元运算符重载决策 109
7.2.5 候选用户定义运算符 109
7.2.6 数值提升 109
7.2.6.1 一元数值提升 110
7.2.6.2 二元数值提升 110
7.3 成员查找 111
7.3.1 基类型 111
7.4 函数成员 112
7.4.1 参数列表 114
7.4.2 重载决策 116
7.4.2.1 适用函数成员 116
7.4.2.2 更好的函数成员 117
7.4.2.3 更好的转换 117
7.4.3 函数成员调用 118
7.4.3.1 已装箱实例上的调用 119
7.5 基本表达式 119
7.5.1 文本 120
7.5.2 简单名称 120
7.5.2.1 块中的固定含义 121
7.5.3 带括号的表达式 122
7.5.4 成员访问 122
7.5.4.1 相同的简称和类型名称 123
7.5.5 调用表达式 124
7.5.5.1 方法调用 124
7.5.5.2 委托调用 125
7.5.6 元素访问 125
7.5.6.1 数组访问 126
7.5.6.2 索引器访问 126
7.5.7 this 访问 127
7.5.8 base 访问 127
7.5.9 后缀增量和后缀减量运算符 128
7.5.10 new 运算符 129
7.5.10.1 对象创建表达式 129
7.5.10.2 数组创建表达式 130
7.5.10.3 委托创建表达式 131
7.5.11 typeof 运算符 133
7.5.12 checked 和 unchecked 运算符 133
7.6 一元运算符 136
7.6.1 一元加运算符 136
7.6.2 一元减运算符 136
7.6.3 逻辑否定运算符 137
7.6.4 按位求补运算符 137
7.6.5 前缀增量和减量运算符 137
7.6.6 强制转换表达式 138
7.7 算术运算符 139
7.7.1 乘法运算符 139
7.7.2 除法运算符 140
7.7.3 余数运算符 141
7.7.4 加法运算符 142
7.7.5 减法运算符 144
7.8 移位运算符 146
7.9 关系和类型测试运算符 147
7.9.1 整数比较运算符 147
7.9.2 浮点比较运算符 148
7.9.3 小数比较运算符 149
7.9.4 布尔相等运算符 149
7.9.5 枚举比较运算符 149
7.9.6 引用类型相等运算符 149
7.9.7 字符串相等运算符 151
7.9.8 委托相等运算符 151
7.9.9 is 运算符 151
7.9.10 as 运算符 152
7.10 逻辑运算符 152
7.10.1 整数逻辑运算符 153
7.10.2 枚举逻辑运算符 153
7.10.3 布尔逻辑运算符 153
7.11 条件逻辑运算符 153
7.11.1 布尔条件逻辑运算符 154
7.11.2 用户定义的条件逻辑运算符 154
7.12 条件运算符 155
7.13 赋值运算符 156
7.13.1 简单赋值 156
7.13.2 复合赋值 158
7.13.3 事件赋值 159
7.14 表达式 159
7.15 常量表达式 159
7.16 布尔表达式 160
8. 语句 161
8.1 结束点和可到达性 161
8.2 块 163
8.2.1 语句列表 163
8.3 空语句 163
8.4 标记语句 164
8.5 声明语句 164
8.5.1 局部变量声明 165
8.5.2 局部常量声明 165
8.6 表达式语句 166
8.7 选择语句 166
8.7.1 if 语句 166
8.7.2 switch 语句 167
8.8 迭代语句 171
8.8.1 while 语句 171
8.8.2 do 语句 171
8.8.3 for 语句 172
8.8.4 foreach 语句 173
8.9 跳转语句 175
8.9.1 break 语句 176
8.9.2 continue 语句 176
8.9.3 goto 语句 177
8.9.4 return 语句 178
8.9.5 throw 语句 178
8.10 try 语句 179
8.11 checked 语句和 unchecked 语句 182
8.12 lock 语句 182
8.13 using 语句 183
9. 命名空间 185
9.1 编译单元 185
9.2 命名空间声明 185
9.3 using 指令 186
9.3.1 Using 别名指令 187
9.3.2 Using 命名空间指令 189
9.4 命名空间成员 191
9.5 类型声明 191
10. 类 193
10.1 类声明 193
10.1.1 类修饰符 193
10.1.1.1 抽象类 194
10.1.1.2 密封类 194
10.1.2 类基本规格 194
10.1.2.1 基类 195
10.1.2.2 接口实现 196
10.1.3 类体 196
10.2 类成员 196
10.2.1 继承 197
10.2.2 new 修饰符 198
10.2.3 访问修饰符 198
10.2.4 构成类型 198
10.2.5 静态成员和实例成员 198
10.2.6 嵌套类型 199
10.2.6.1 完全限定名 199
10.2.6.2 已声明可访问性 200
10.2.6.3 隐藏 200
10.2.6.4 this 访问 201
10.2.6.5 对包含类型的私有和受保护成员的访问 202
10.2.7 保留成员名称 203
10.2.7.1 为属性保留的成员名称 203
10.2.7.2 为事件保留的成员名称 204
10.2.7.3 为索引器保留的成员名称 204
10.2.7.4 为析构函数保留的成员名称 204
10.3 常量 204
10.4 字段 206
10.4.1 静态字段和实例字段 207
10.4.2 只读字段 207
10.4.2.1 对常量使用静态只读字段 208
10.4.2.2 常量和静态只读字段的版本控制 208
10.4.3 易失字段 209
10.4.4 字段初始化 210
10.4.5 变量初始值设定项 210
10.4.5.1 静态字段初始化 211
10.4.5.2 实例字段初始化 212
10.5 方法 213
10.5.1 方法参数 214
10.5.1.1 值参数 215
10.5.1.2 引用参数 215
10.5.1.3 输出参数 216
10.5.1.4 参数数组 217
10.5.2 静态方法和实例方法 219
10.5.3 虚方法 220
10.5.4 重写方法 222
10.5.5 密封方法 223
10.5.6 抽象方法 224
10.5.7 外部方法 225
10.5.8 方法体 226
10.5.9 方法重载 226
10.6 属性 226
10.6.1 静态属性和实例属性 227
10.6.2 访问器 228
10.6.3 虚、密封、重写和抽象访问器 232
10.7 事件 233
10.7.1 类似字段的事件 235
10.7.2 事件访问器 237
10.7.3 静态事件和实例事件 238
10.7.4 虚、密封、重写和抽象访问器 238
10.8 索引器 238
10.8.1 索引器重载 242
10.9 运算符 242
10.9.1 一元运算符 243
10.9.2 二元运算符 244
10.9.3 转换运算符 244
10.10 实例构造函数 245
10.10.1 构造函数初始值设定项 246
10.10.2 实例变量初始值设定项 247
10.10.3 构造函数执行 247
10.10.4 默认构造函数 249
10.10.5 私有构造函数 250
10.10.6 可选的实例构造函数参数 250
10.11 静态构造函数 250
10.12 析构函数 252
11. 结构 255
11.1 结构声明 255
11.1.1 结构修饰符 255
11.1.2 结构接口 256
11.1.3 结构体 256
11.2 结构成员 256
11.3 类和结构的区别 256
11.3.1 值语义 257
11.3.2 继承 258
11.3.3 赋值 258
11.3.4 默认值 258
11.3.5 装箱和拆箱 259
11.3.6 this 的含义 259
11.3.7 字段初始值设定项 259
11.3.8 构造函数 259
11.3.9 析构函数 260
11.3.10 静态构造函数 260
11.4 结构示例 261
11.4.1 数据库整数类型 261
11.4.2 数据库布尔类型 262
12. 数组 265
12.1 数组类型 265
12.1.1 System.Array 类型 266
12.2 数组创建 266
12.3 数组元素访问 266
12.4 数组成员 266
12.5 数组协变 266
12.6 数组初始值设定项 267
13. 接口 269
13.1 接口声明 269
13.1.1 接口修饰符 269
13.1.2 基接口 269
13.1.3 接口体 270
13.2 接口成员 270
13.2.1 接口方法 271
13.2.2 接口属性 272
13.2.3 接口事件 272
13.2.4 接口索引器 272
13.2.5 接口成员访问 272
13.3 完全限定接口成员名 274
13.4 接口实现 275
13.4.1 显式接口成员实现 275
13.4.2 接口映射 277
13.4.3 接口实现继承 280
13.4.4 接口重新实现 281
13.4.5 抽象类和接口 282
14. 枚举 285
14.1 枚举声明 285
14.2 枚举修饰符 286
14.3 枚举成员 286
14.4 System.Enum 类型 288
14.5 枚举值和运算 288
15. 委托 289
15.1 委托声明 289
15.2 委托实例化 291
15.3 委托调用 291
16. 异常 295
16.1 导致异常的原因 295
16.2 System.Exception 类 295
16.3 异常的处理方式 296
16.4 公共异常类 296
17. 属性 299
17.1 属性类 299
17.1.1 属性用法 299
17.1.2 定位和命名参数 300
17.1.3 属性参数类型 301
17.2 属性专用化 301
17.3 属性实例 306
17.3.1 属性的编译 306
17.3.2 属性实例的运行时检索 306
17.4 保留属性 307
17.4.1 AttributeUsage 属性 307
17.4.2 Conditional 属性 308
17.4.2.1 条件方法 308
17.4.2.2 条件属性类 310
17.4.3 Obsolete 属性 311
17.5 交互操作的属性 312
17.5.1 与 COM 和 Win32 组件的交互操作 312
17.5.2 与其他 .NET 语言的交互操作 312
17.5.2.1 IndexerName 属性 312
18. 不安全代码 313
18.1 不安全上下文 313
18.2 指针类型 315
18.3 固定和可移动变量 318
18.4 指针转换 318
18.5 表达式中的指针 319
18.5.1 指针间接寻址 320
18.5.2 指针成员访问 320
18.5.3 指针元素访问 321
18.5.4 address-of 运算符 322
18.5.5 指针递增和递减 323
18.5.6 指针算术运算 323
18.5.7 指针比较 324
18.5.8 sizeof 运算符 324
18.6 fixed 语句 325
18.7 堆栈分配 328
18.8 动态内存分配 329
A. 文档注释 331
A.1. 介绍 331
A.2. 建议的标记 332
A.2.1. <c> 333
A.2.2. <code> 333
A.2.3. <example> 334
A.2.4. <exception> 334
A.2.5. <include> 335
A.2.6. <list> 335
A.2.7. <para> 336
A.2.8. <param> 337
A.2.9. <paramref> 337
A.2.10. <permission> 338
A.2.11. <summary> 338
A.2.12. <returns> 338
A.2.13. <see> 339
A.2.14. <seealso> 339
A.2.15. <summary> 340
A.2.16. <value> 340
A.3. 处理文档文件 340
A.3.1. ID 字符串格式 341
A.3.2. ID 字符串示例 341
A.4. 示例 345
A.4.1. C# 源代码 345
A.4.2. 产生的 XML 347
B. 语法 351
B.1. 词法文法 351
B.1.1. 行结束符 351
B.1.2. 空白 351
B.1.3. 注释 351
B.1.4. 标记 352
B.1.5. Unicode 字符转义序列 352
B.1.6. 标识符 353
B.1.7. 关键字 354
B.1.8. 文本 354
B.1.9. 运算符和标点符号 356
B.1.10. 预处理指令 356
B.2. 句法文法 358
B.2.1. 基本概念 358
B.2.2. 类型 358
B.2.3. 变量 360
B.2.4. 表达式 360
B.2.5. 语句 363
B.2.6. 命名空间 366
B.2.7. 类 367
B.2.8. 结构 373
B.2.9. 数组 374
B.2.10. 接口 374
B.2.11. 枚举 375
B.2.12. 委托 376
B.2.13. 属性 376
B.3. 不安全代码的语法扩展 377
C. 参考资料 381
WIN7及vista语言包安装工具Vistalizator
用于vista,Win7所有版本更改桌面界面,可更改中文版至诸如英文版,中文繁体版,日文版等多个国家语言版本。
http://www.technize.net/windows-7-sp1-language-packs-direct-download-links-kb2483139/
dotnet反编译reflector.zip
Reflector是一个类浏览,分析器,同时它还是一个.net源文件查看器.Reflector支持简单地浏览,定位,搜索,反编译用C#,VB和中间语言写成的编译文件(dll).
来源于:Red Gate Software
Prentice.Hall_-_Cryptography.and.Network.Security.4th.Edition.Nov.2005
Prentice.Hall_-_Cryptography.and.Network.Security.4th.Edition.Nov.2005.rar
CSS2.0帮助文档
本《协议》授予您下列权利:您可以安装、使用、访问、显示、运行本作品。您可以保留多份副本,可以自由传播本作品。
上述权利不适用于您的任何商业行为或商业用途。否则您务必与苏昱联系。
谁是苏昱?自己见文档作者介绍..
Secure Hash Standard
NIST网站:
Federal Information
Processing Standards Publication 180-2
2002 August 1
Announcing the
SECURE HASH STANDARD
Table Of Contents
1. INTRODUCTION .............................................................................................................................................................3
2. DEFINITIONS....................................................................................................................................................................4
2.1 GLOSSARY OF TERMS AND ACRONYMS....................................................................................................................4
2.2 ALGORITHM PARAMETERS, SYMBOLS, AND TERMS...............................................................................................4
2.2.1 Parameters.......................................................................................................................................................4
2.2.2 Symbols.............................................................................................................................................................5
3. NOTATION AND CONVENTIONS............................................................................................................................6
3.1 BIT STRINGS AND INTEGERS......................................................................................................................................6
3.2 OPERATIONS ON WORDS............................................................................................................................................7
4. FUNCTIONS AND CONSTANTS................................................................................................................................9
4.1 FUNCTIONS...................................................................................................................................................................9
4.1.1 SHA-1 Functions.............................................................................................................................................9
4.1.2 SHA-256 Functions........................................................................................................................................9
4.1.3 SHA-384 and SHA-512 Functions................................................................................................................9
4.2 CONSTANTS................................................................................................................................................................ 10
4.2.1 SHA-1 Constants...........................................................................................................................................10
4.2.2 SHA-256 Constants ......................................................................................................................................10
4.2.3 SHA-384 and SHA-512 Constants..............................................................................................................10
5. PREPROCESSING.........................................................................................................................................................12
5.1 PADDING THE MESSAGE ........................................................................................................................................... 12
5.1.1 SHA-1 and SHA-256.....................................................................................................................................12
5.1.2 SHA-384 and SHA-512................................................................................................................................12
5.2 PARSING THE PADDED MESSAGE ............................................................................................................................. 13
5.2.1 SHA-1 and SHA-256.....................................................................................................................................13
5.2.2 SHA-384 and SHA-512................................................................................................................................13
5.3 SETTING THE INITIAL HASH VALUE (H(0)).............................................................................................................. 13
5.3.1 SHA-1..............................................................................................................................................................13
5.3.2 SHA-256 .........................................................................................................................................................13
5.3.3 SHA-384 .........................................................................................................................................................14
5.3.4 SHA-512 .........................................................................................................................................................14
6. SECURE HASH ALGORITHMS ...............................................................................................................................15
6.1 SHA-1......................................................................................................................................................................... 15
6.1.1 SHA-1 Preprocessing...................................................................................................................................15
6.1.2 SHA-1 Hash Computation...........................................................................................................................15
6.1.3 Alternate Method for Computing a SHA-1 Message Digest...................................................................17
2
6.2 SHA-256..................................................................................................................................................................... 18
6.2.1 SHA-256 Preprocessing...............................................................................................................................19
6.2.2 SHA-256 Hash Computation.......................................................................................................................19
6.3 SHA-512..................................................................................................................................................................... 20
6.3.1 SHA-512 Preprocessing...............................................................................................................................21
6.3.2 SHA-512 Hash Computation.......................................................................................................................21
6.4 SHA-384..................................................................................................................................................................... 22
APPENDIX A: SHA-1 EXAMPLES ...................................................................................................................................25
A.1 SHA-1 EXAMPLE (ONE-BLOCK MESSAGE) ........................................................................................................... 25
A.2 SHA-1 EXAMPLE (MULTI-BLOCK MESSAGE) ....................................................................................................... 27
A.3 SHA-1 EXAMPLE (LONG MESSAGE) ....................................................................................................................... 32
APPENDIX B: SHA-256 EXAMPLES ...............................................................................................................................33
B.1 SHA-256 EXAMPLE (ONE-BLOCK MESSAGE) ....................................................................................................... 33
B.2 SHA-256 EXAMPLE (MULTI-BLOCK MESSAGE) ................................................................................................... 35
B.3 SHA-256 EXAMPLE (LONG MESSAGE)................................................................................................................... 40
APPENDIX C: SHA-512 EXAMPLES ...............................................................................................................................41
C.1 SHA-512 EXAMPLE (ONE-BLOCK MESSAGE) ....................................................................................................... 41
C.2 SHA-512 EXAMPLE (MULTI-BLOCK MESSAGE) ................................................................................................... 46
C.3 SHA-512 EXAMPLE (LONG MESSAGE)................................................................................................................... 55
APPENDIX D: SHA-384 EXAMPLES ..........................................................................................................................56
D.1 SHA-384 EXAMPLE (ONE-BLOCK MESSAGE) ....................................................................................................... 56
D.2 SHA-384 EXAMPLE (MULTI-BLOCK MESSAGE) ................................................................................................... 61
D.3 SHA-384 EXAMPLE (LONG MESSAGE)................................................................................................................... 70
APPENDIX E: REFERENCES............................................................................................................................................71