展开全部

主编推荐语

本书详细讲解了加密解密原理及其实现。

内容简介

本书详解Windows加解密算法的原理及其实现技术,内容安排首先从各大主流加解密算法的原理入手,然后用C/C++语言自主实现这些算法,最后从C/C++提供的主流加解密框架和函数库入手讲解其使用方法。

本书分为14章,内容包括密码学概述、搭建C和C++密码开发环境、对称密码算法、杂凑函数和HMAC、密码学中常见的编码格式、非对称算法RSA的加解密、数字签名技术、椭圆曲线密码体制ECC、CSP和CryptoAPI、身份认证和PKI理论基础、实战PKI、SSL-TLS编程、SM2算法的数学基础、SM2算法的实现。

本书适合用于C/C++初中级开发人员自学密码开发技术,也适合高等院校和培训机构相关专业的师生教学参考。

目录

  • 版权信息
  • 内容简介
  • 前言
  • 第1章 密码学概述
  • 1.1 玛丽女王的密码
  • 1.2 密码学简史
  • 1.3 密码学的基本概念
  • 1.3.1 基本概念
  • 1.3.2 密码学要解决的5大问题
  • 1.3.3 密码学中的五元组
  • 1.3.4 加解密算法的分类
  • 第2章 搭建C和C++密码开发环境
  • 2.1 密码编程的两个重要的国际库
  • 2.2 C/C++密码库OpenSSL
  • 2.2.1 OpenSSL源代码模块结构
  • 2.2.2 OpenSSL加密库调用方式
  • 2.2.3 OpenSSL支持的对称加密算法
  • 2.2.4 OpenSSL支持的非对称加密算法
  • 2.2.5 OpenSSL支持的信息摘要算法
  • 2.2.6 OpenSSL密钥和证书管理
  • 2.2.7 面向对象与OpenSSL
  • 2.2.8 BIO接口
  • 2.2.9 EVP接口
  • 2.2.10 关于版本和操作系统
  • 2.2.11 在Windows下编译OpenSSL 1.1.1
  • 2.2.12 在Windows下编译OpenSSL 1.0.2m
  • 2.2.13 在Linux下编译安装OpenSSL 1.0.2
  • 2.2.14 测试使用openssl命令
  • 2.3 纯C++密码开发Crypto++库
  • 2.3.1 Crypto++的编译
  • 2.3.2 使用Cypto++进行AES加解密
  • 2.4 国产密码开发库GmSSL
  • 2.4.1 GmSSL的特点
  • 2.4.2 GmSSL的一些历史
  • 2.4.3 什么是国密算法
  • 2.4.4 GmSSL的下载
  • 2.4.5 在Windows下编译安装GmSSL
  • 2.4.6 在Linux下编译安装GmSSL
  • 2.4.7 默认编译安装GmSSL
  • 2.4.8 在老版本的Linux下编译安装GmSSL
  • 第3章 对称密码算法
  • 3.1 基本概念
  • 3.2 对称加解密算法的分类
  • 3.3 流加密算法
  • 3.3.1 基本概念
  • 3.3.2 流密码和分组密码的比较
  • 3.3.3 RC4算法
  • 3.4 分组加密算法
  • 3.4.1 工作模式
  • 3.4.2 短块加密
  • 3.4.3 DES和3DES算法
  • 3.4.4 SM4算法
  • 3.5 利用OpenSSL进行对称加解密
  • 3.5.1 基本概念
  • 3.5.2 对称加解密相关函数
  • 第4章 杂凑函数和HMAC
  • 4.1 杂凑函数概述
  • 4.1.1 什么是杂凑函数
  • 4.1.2 密码学和杂凑函数
  • 4.1.3 杂凑函数的发展
  • 4.1.4 杂凑函数的设计
  • 4.1.5 杂凑函数的分类
  • 4.1.6 杂凑函数的碰撞
  • 4.2 SM3杂凑算法
  • 4.2.1 常量和函数
  • 4.2.2 填充
  • 4.2.3 迭代压缩
  • 4.2.4 杂凑值
  • 4.2.5 一段式SM3算法的实现
  • 4.2.6 三段式SM3杂凑的实现
  • 4.2.7 OpenSSL实现SM3算法
  • 4.3 HMAC
  • 4.3.1 什么是HMAC
  • 4.3.2 产生背景
  • 4.3.3 设计目标
  • 4.3.4 算法描述
  • 4.3.5 独立自主实现HMAC-SM3
  • 4.4 SHA系列杂凑算法
  • 4.4.1 SHA算法概述
  • 4.4.2 SHA的发展史
  • 4.4.3 SHA系列算法的核心思想和特点
  • 4.4.4 单向性
  • 4.4.5 主要用途
  • 4.4.6 SHA256算法原理解析
  • 4.4.7 SHA384和SHA512算法
  • 4.5 更通用的基于OpenSSL的哈希运算
  • 4.5.1 获取摘要算法函数EVP_get_digestbyname
  • 4.5.2 创建结构体并初始化函数EVP_MD_CTX_create
  • 4.5.3 销毁摘要上下文结构体EVP_MD_CTX_destroy
  • 4.5.4 摘要初始化函数EVP_DigestInit_ex
  • 4.5.5 摘要更新函数EVP_DigestUpdate
  • 4.5.6 摘要结束函数EVP_Digest_Final_ex
  • 4.5.7 单包摘要计算函数EVP_Digest
  • 第5章 密码学中常见的编码格式
  • 5.1 Base64编码
  • 5.1.1 Base64编码的由来
  • 5.1.2 Base64的索引表
  • 5.1.3 Base64的转化原理
  • 5.1.4 使用OpenSSL的base64命令
  • 5.1.5 编程实现Base64编解码
  • 5.2 PEM文件
  • 5.2.1 什么是PEM文件
  • 5.2.2 生成一个PEM文件
  • 5.3 ASN.1和BER、DER
  • 5.3.1 ASN.1的历史
  • 5.3.2 ASN.1的基本概念
  • 5.3.3 ASN.1和ASN.1编码规则在OSI中的应用
  • 5.3.4 电子商务中ASN.1和DER编码的应用
  • 5.3.5 ASN的优点
  • 5.3.6 ASN.1的文法描述
  • 5.3.7 编码规则
  • 5.3.8 ASN.1实例
  • 第6章 非对称算法RSA的加解密
  • 6.1 非对称密码体制概述
  • 6.2 RSA概述
  • 6.3 RSA的数学基础
  • 6.3.1 素数(质数)
  • 6.3.2 素性检测
  • 6.3.3 倍数
  • 6.3.4 约数
  • 6.3.5 互质数
  • 6.3.6 质因数
  • 6.3.7 强素数
  • 6.3.8 因子
  • 6.3.9 模运算
  • 6.3.10 模运算的操作与性质
  • 6.3.11 单向函数
  • 6.3.12 费马定理和欧拉定理
  • 6.3.13 幂
  • 6.3.14 模幂运算
  • 6.3.15 同余符号“≡”
  • 6.3.16 欧拉函数
  • 6.3.17 最大公约数
  • 6.3.18 欧几里得算法
  • 6.3.19 扩展欧几里得算法
  • 6.4 RSA算法描述
  • 6.5 RSA算法实例
  • 6.5.1 查找法计算私钥d
  • 6.5.2 简便法计算私钥d
  • 6.5.3 扩展欧几里得算法计算私钥d
  • 6.5.4 加密字母
  • 6.5.5 分组加密字符串
  • 6.6 熟悉PKCS#1
  • 6.6.1 PKCS#1填充
  • 6.6.2 PKCS#1中的RSA私钥语法
  • 6.7 在OpenSSL命令中使用RSA
  • 6.7.1 生成RSA公私钥
  • 6.7.2 提取私钥各参数
  • 6.7.3 RSA公钥加密一个文件
  • 6.7.4 RSA私钥解密一个文件
  • 6.8 基于OpenSSL库的RSA编程
  • 6.8.1 OpenSSL的RSA实现
  • 6.8.2 主要数据结构
  • 6.8.3 主要函数
  • 6.9 随机大素数的生成
  • 6.10 RSA算法的攻击及分析
  • 6.10.1 因子分解攻击
  • 6.10.2 选择密文攻击
  • 6.10.3 公共模数攻击
  • 6.10.4 小指数攻击
  • 第7章 数字签名技术
  • 7.1 概述
  • 7.2 什么是数字签名技术
  • 7.2.1 签名
  • 7.2.2 数字签名的基本概念
  • 7.2.3 数字签名的原理
  • 7.2.4 数字签名的一般性定义
  • 7.2.5 数字签名的分类
  • 7.2.6 数字签名的安全性
  • 7.2.7 数字签名的特征与应用
  • 7.3 RSA公钥算法在数字签名中的应用
  • 7.4 使用OpenSSL命令进行签名和验签
  • 7.5 基于OpenSSL的签名验签编程
  • 7.5.1 直接使用RSA函数进行签名验签
  • 7.5.2 使用EVP系列函数进行签名验签
  • 第8章 椭圆曲线密码体制
  • 8.1 概述
  • 8.1.1 信息安全技术
  • 8.1.2 密码体制
  • 8.1.3 椭圆曲线密码体制
  • 8.1.4 为什么使用椭圆曲线密码体制
  • 8.2 背景基础知识
  • 8.2.1 无穷远点
  • 8.2.2 射影平面坐标系
  • 8.2.3 域
  • 8.2.4 数域
  • 8.2.5 有限域
  • 8.2.6 素数域
  • 8.2.7 逆元
  • 8.3 椭圆曲线的定义
  • 8.4 密码学中的椭圆曲线
  • 8.5 ECC算法体系
  • 8.5.1 有限域的模运算
  • 8.5.2 椭圆曲线上的点加和倍点运算
  • 8.5.3 标量乘运算
  • 8.5.4 数据加解密算法
  • 第9章 CSP和CryptoAPI
  • 9.1 什么是CSP
  • 9.2 CryptoAPI简介
  • 9.3 CSP服务体系
  • 9.4 CSP的组成
  • 9.5 CryptoAPI体系结构
  • 9.6 CryptoAPI调用底层CSP服务方式
  • 9.7 CrpytoAPI的基本功能
  • 9.8 搭建CryptoAPI开发环境
  • 9.9 基本加密函数
  • 9.9.1 服务提供者函数
  • 9.9.2 密钥的产生和交换函数
  • 9.9.3 编码/解码函数
  • 9.9.4 数据加密/解密函数
  • 9.9.5 哈希和数字签名函数
  • 第10章 身份认证和PKI理论基础
  • 10.1 身份认证概述
  • 10.1.1 网络安全与身份认证
  • 10.1.2 网络环境下身份认证所面临的威胁
  • 10.1.3 网络身份认证体系的发展现状
  • 10.2 身份认证技术基础
  • 10.2.1 用户名/密码认证
  • 10.2.2 智能卡认证
  • 10.2.3 生物特征认证
  • 10.2.4 动态口令
  • 10.2.5 USB Key认证
  • 10.2.6 基于冲击响应的认证模式
  • 10.2.7 基于数字证书PKI的认证模式
  • 10.3 PKI概述
  • 10.3.1 PKI的国内外应用状态
  • 10.3.2 PKI的应用前景
  • 10.3.3 PKI存在的问题及发展趋势
  • 10.4 基于X.509证书的PKI认证体系
  • 10.4.1 数字证书
  • 10.4.2 数字信封
  • 10.4.3 PKI体系结构
  • 10.4.4 认证机构
  • 10.4.5 基于X.509证书的身份认证
  • 第11章 实战PKI
  • 11.1 只有密码算法是不够的
  • 11.2 OpenSSL实现CA的搭建
  • 11.2.1 准备实验环境
  • 11.2.2 熟悉CA环境
  • 11.2.3 创建所需要的文件
  • 11.2.4 CA自签名证书(构造根CA)
  • 11.2.5 根CA为子CA颁发证书
  • 11.2.6 普通用户向子CA申请证书
  • 11.3 基于OpenSSL的证书编程
  • 11.3.1 把DER编码转换为内部结构体函数d2i_X509
  • 11.3.2 获得证书版本函数X509_get_version
  • 11.3.3 获得证书序列号函数X509_get_serialNumber
  • 11.3.4 获得证书颁发者信息函数X509_get_issuer_name
  • 11.3.5 获得证书拥有者信息函数X509_get_subject_name
  • 11.3.6 获得证书有效期的起始日期函数X509_get_notBefore
  • 11.3.7 获得证书有效期的终止日期函数X509_get_notAfter
  • 11.3.8 获得证书公钥函数X509_get_pubkey
  • 11.3.9 创建证书存储区上下文环境函数X509_STORE_CTX
  • 11.3.10 释放证书存储区上下文环境函数X509_STORE_CTX_free
  • 11.3.11 初始化证书存储区上下文环境函数X509_STORE_CTX_init
  • 11.3.12 验证证书函数X509_verify_cert
  • 11.3.13 创建证书存储区函数X509_STORE_new
  • 11.3.14 释放证书存储区函数X509_STORE_free
  • 11.3.15 向证书存储区添加证书函数X509_STORE_add_cert
  • 11.3.16 向证书存储区添加证书吊销列表函数X509_STORE_add_crl
  • 11.3.17 释放X509结构体函数X509_free
  • 11.4 证书编程实战
  • 第12章 SSL-TLS编程
  • 12.1 SSL协议规范
  • 12.1.1 什么是SSL协议
  • 12.1.2 SSL协议的优点
  • 12.1.3 SSL协议的发展
  • 12.1.4 SSL v3/TLS提供的服务
  • 12.1.5 SSL协议层次结构模型
  • 12.1.6 SSL记录层协议
  • 12.1.7 SSL握手协议层
  • 12.2 OpenSSL中的SSL编程
  • 12.3 SSL函数
  • 12.3.1 初始化SSL算法库函数SSL library_init
  • 12.3.2 初始化SSL上下文环境变量函数SSL_CTX_new
  • 12.3.3 释放SSL上下文环境变量函数SSL_CTX_free
  • 12.3.4 文件形式设置SSL证书函数SSL_CTX _use_certificate_file
  • 12.3.5 结构体方式设置SSL证书函数SSL_CTX_use_certificate
  • 12.3.6 文件形式设置SSL私钥函数SSL_CTX_use_PrivateKey_file
  • 12.3.7 结构体方式设置SSL私钥函数SSL_CTX_use_PrivateKey
  • 12.3.8 检查SSL私钥和证书是否匹配函数SSL_CTX_check_private_key
  • 12.3.9 创建SSL结构函数SSL_new
  • 12.3.10 释放SSL套接字结构体函数SSL_free
  • 12.3.11 设置读写套接字函数SSL_set_fd
  • 12.3.12 设置只读套接字函数SSL_set_rfd
  • 12.3.13 设置只写套接字函数SSL_set_wfd
  • 12.3.14 启动TLS/SSL握手函数SSL_connect
  • 12.3.15 接受SSL连接函数SSL_accept
  • 12.3.16 获取对方的X509证书函数SSL_get_peer_certificate
  • 12.3.17 向TLS/SSL连接写数据函数SSL_write
  • 12.3.18 从TLS/SSL连接中读取数据函数SSL_Read
  • 12.4 准备SSL通信所需的证书
  • 12.4.1 准备实验环境
  • 12.4.2 熟悉CA环境
  • 12.4.3 创建所需要的文件
  • 12.4.4 创建根CA的证书
  • 12.4.5 生成服务端的证书请求文件
  • 12.4.6 签发出服务端证书
  • 12.4.7 生成客户端的证书请求文件
  • 12.4.8 签发客户端证书
  • 12.5 实战SSL网络编程
  • 第13章 SM2算法的数学基础
  • 13.1 素域Fp
  • 13.1.1 素域Fp的定义
  • 13.1.2 Fp上椭圆曲线的定义
  • 13.1.3 Fp上椭圆曲线的阶
  • 13.2 二元扩域F2m
  • 13.2.1 二元扩域F2m的定义
  • 13.2.2 F2m上椭圆曲线的定义
  • 13.2.3 F2m上椭圆曲线的阶
  • 13.3 椭圆曲线多倍点运算
  • 13.3.1 定义
  • 13.3.2 椭圆曲线多倍点运算的实现
  • 13.3.3 椭圆曲线多倍点运算复杂度估计
  • 13.4 求解椭圆曲线离散对数问题的方法
  • 13.4.1 椭圆曲线离散对数求解方法
  • 13.4.2 安全椭圆曲线满足的条件
  • 13.5 椭圆曲线上点的压缩
  • 13.5.1 定义
  • 13.5.2 Fp上椭圆曲线点的压缩与解压缩方法
  • 13.5.3 F2m上椭圆曲线点的压缩与解压缩方法
  • 13.6 有限域和模运算
  • 13.6.1 有限域中的指数运算
  • 13.6.2 有限域中的逆运算
  • 13.6.3 Lucas序列的生成
  • 13.6.4 模素数平方根的求解
  • 13.6.5 迹函数和半迹函数
  • 13.6.6 F2m上二次方程的求解
  • 13.6.7 整数模素数阶的检查
  • 13.6.8 整数模素数阶的计算
  • 13.6.9 模素数的阶为给定值的整数的构造
  • 13.6.10 概率素性检测
  • 13.6.11 近似素性检测
  • 13.7 椭圆曲线算法
  • 13.7.1 椭圆曲线阶的计算
  • 13.7.2 椭圆曲线上点的寻找
  • 13.8 曲线示例
  • 13.8.1 Fp上的椭圆曲线
  • 13.8.2 F2m上的椭圆曲线
  • 13.9 椭圆曲线方程参数的拟随机生成
  • 13.9.1 Fp上椭圆曲线方程参数的拟随机生成
  • 13.9.2 F2m上椭圆曲线方程参数的拟随机生成
  • 13.10 椭圆曲线方程参数的验证
  • 13.10.1 Fp上椭圆曲线方程参数的验证
  • 13.10.2 F2m上椭圆曲线方程参数的验证
  • 第14章 SM2算法的实现
  • 14.1 为何要推出SM2算法
  • 14.2 SM2算法采用的椭圆曲线方程
  • 14.3 SM2算法的用途
  • 14.4 椭圆曲线密码体制的不足
  • 14.5 椭圆曲线的研究热点
  • 14.6 SM2算法中的有限域
  • 14.6.1 素域Fq
  • 14.6.2 二元扩域F2m
  • 14.7 有限域上的椭圆曲线
  • 14.7.1 Fp上的椭圆曲线
  • 14.7.2 F2m上的椭圆曲线
  • 14.8 椭圆曲线系统参数及其验证
  • 14.8.1 一般要求
  • 14.8.2 Fp上椭圆曲线系统参数及其验证
  • 14.8.3 F2m上椭圆曲线系统参数及其验证
  • 14.9 密钥对的生成
  • 14.10 公钥的验证
  • 14.10.1 Fp上椭圆曲线公钥的验证
  • 14.10.2 F2m上椭圆曲线公钥的验证
  • 14.11 MIRACL库入门
  • 14.11.1 获取MIRACL
  • 14.11.2 生成静态库并测试
  • 14.12 SM2加解密算法
  • 14.12.1 算法参数
  • 14.12.2 辅助函数
  • 14.12.3 加密算法及流程
  • 14.12.4 解密算法及流程
  • 14.12.5 椭圆曲线消息加解密示例
  • 14.12.6 用代码实现SM2加解密算法
  • 14.13 SM2数字签名
  • 14.13.1 算法参数
  • 14.13.2 辅助函数
  • 14.13.3 数字签名的生成算法及流程
  • 14.13.4 数字签名的验证算法及流程
  • 14.13.5 数字签名与验证示例
  • 14.13.6 用代码实现SM2签名验签算法
展开全部

评分及书评

评分不足
1个评分
  • 用户头像
    给这本书评了
    5.0

    C/C++ 语言作为当今世界主流的开发语言,使用十分广泛,而关于 C/C++ 加解密方面的图书寥寥无几,而且现有的只是对基本的函数进行介绍,并没有深入算法原理。也就是读者看了,只知道这样用,而不理解为何这样用。学习信息安全技术,不先从原理上来理解其本质,是开发不出安全的系统来的。

      转发
      评论

    出版方

    清华大学出版社

    清华大学出版社成立于1980年6月,是由教育部主管、清华大学主办的综合出版单位。植根于“清华”这座久负盛名的高等学府,秉承清华人“自强不息,厚德载物”的人文精神,清华大学出版社在短短二十多年的时间里,迅速成长起来。清华大学出版社始终坚持弘扬科技文化产业、服务科教兴国战略的出版方向,把出版高等学校教学用书和科技图书作为主要任务,并为促进学术交流、繁荣出版事业设立了多项出版基金,逐渐形成了以出版高水平的教材和学术专著为主的鲜明特色,在教育出版领域树立了强势品牌。