WindowsC/C++加密解密实战

WindowsC/C++加密解密实战

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

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

内容简介

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

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

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

作者简介

作者朱晨冰,朱文伟的笔名,名校计算机专业统招硕士,20年C\C++、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《Windows C/C++加密解密实战》《密码学原理与Java实现》《Linux C与C++一线开发实践》《Visual C++2017从入门到精通》。

章节目录

版权信息

内容简介

前言

第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签名验签算法

WindowsC/C++加密解密实战是2021年由清华大学出版社出版,作者李建英。

得书感谢您对《WindowsC/C++加密解密实战》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
C/C++代码调试的艺术 电子书
本书围绕C/C++程序调试这一主题,介绍了在Windows和Linux操作系统上如何高效地调试C/C++程序。本书分为11章,内容涵盖了程序调试的基本知识、VisualC++调试程序的基本功能与技巧、Linux系统中gdb工具的使用、死锁调试、动态库调试、内存泄漏检查、远程调试、崩溃转储文件分析、发行版调试,以及调试的高级话题和调试扩展方面的知识。
C++程序设计教程 电子书
全书共10章,第1章主要讲解了C++语言相对于C语言在基础知识上的扩充。第2—7章分别讲解了类与对象、继承与多态、运算符重载、模板、I/O流和异常。第8-9章分别讲解了STL、设计模式以及C++11的一些新特性,作为C++程序员,这一部分内容或早或晚都必须要学习,熟练掌握它们可使程序开发更加得心应手。第10章为项目实战,结合前面所学知识,开发了一个企业级项目——物流管理系统。
C++语言程序设计 电子书
C++程序基础知识(基本句子结构,I/O,函数,类与对象,数据共享与保护,数组与指针,继承,多态,异常处理).C++支持面向过程与面向对象两种编程模式,本教材在结构安排上,注重这两种模式的过渡,结合到面向对象的专题论述,让学生从传统过程C模式程序设计真正进入面向对象C++模式的程序设计知识海洋中。
C和C++游戏趣味编程 电子书
趣味案例教C/C++编程,激发学习兴趣,适合初学者自学。
C++从入门到精通 电子书
C++基础知识、核心技术与提高篇实践项目。