软件已经成为人们日常生活与工作中常见的辅助工具,但是对于软件的工作原理,很多人却不是非常了解。
本书对软件的工作原理进行了解析,让读者对常用软件的工作原理有一个大致的了解。内容涉及数据如何加密、密码如何使用和保护、如何创建计算机图像、如何压缩和存储视频、如何搜索数据、程序如何解决同样的问题而不会引发冲突以及如何找出zui佳路径等方面。
本书适合从事软件开发工作的专业技术人员,以及对软件工作原理感兴趣的读者。
软件驱动着现代世界,但对许多人来说其内部的工作原理仍然是个谜。虽然软件在背后支撑着CGI图形、安全网络购物以及高速的Google搜索,并且我们每天都在使用软件,但并不是每个人都确切了解其工作原理。
如果你想知道在计算机屏幕后面究竟发生了什么的话,本书将会带你领略身边那些软件的神奇世界。例如,你将学到计算机生成的动画是如何与现实世界中的镜头组合起来并创造出逼真特效的;视频游戏是如何实时渲染图形的;哈希函数是如何混淆密码以使其免受攻击的;以及Google是如何对搜索结果进行排序的。
本书通俗易懂,具有详细的解释和任何人都能理解的直观图表。本书不含任何代码,故阅读本无需技术背景。
如果想要了解计算机是如何在每天执行我们习以为常却又很神奇的那些任务,你不必非得成为计算机科学家,通过阅读本书,你就可以领略软件背后的奥秘。
通过阅读本书,你还将了解:
? 加密的工作原理以及不同加密标准的安全程度;
? 如何压缩视频以满足在线流式播放;
? 数据是如何在庞大的数据库中被搜索出来(查找到)的;
? 应用程序是如何在没有冲突的情况下协同工作的;
? 软件是如何理解地图信息并为你导航的。
V. Anton Spraul已经为来自世界各地的学生讲授了15年以上的入门编程和计算机科学。同时他也是《Think Like a Programmer》(《像程序员一样思考》)和《Computer Science Made Simple》这两本书的作者。
目 录
第1章 加密1
1.1 加密目标2
1.2 换位法:相同的数据,不同的
顺序2
1.2.1 密钥4
1.2.2 对加密的攻击5
1.3 替换法:替换数据6
1.3.1 变化替换模式6
1.3.2 密钥扩展9
1.4 高级加密标准9
1.4.1 二进制基础10
1.4.2 AES加密:概述12
1.4.3 AES中的密钥扩展13
1.4.4 AES加密处理流程14
1.4.5 数据块链接15
1.4.6 AES为什么是安全的16
1.4.7 AES可能遭受的攻击17
1.5 私钥加密的限制18
第2章 密码19
2.1 将密码转成数字19
2.2 MD5散列函数21
2.2.1 密码编码21
2.2.2 按位运算22
2.2.3 MD5散列流程23
2.2.4 达到好的散列函数的
标准24
2.3 数字签名25
2.3.1 身份问题25
2.3.2 碰撞攻击25
2.4 身份认证系统中的密码26
2.4.1 危险的密码表26
2.4.2 对密码进行散列27
2.4.3 字典式攻击27
2.4.4 散列表28
2.4.5 散列链29
2.4.6 迭代式散列32
2.4.7 为密码加盐33
2.4.8 密码表安全吗34
2.5 密码存储服务34
2.6 小结35
第3章 网络安全37
3.1 公钥加密是如何解决密钥共享
问题的37
3.2 公钥加密所需的数学运算38
3.2.1 可逆函数(Invertible
Functions)38
3.2.2 单向函数(One-Way
Functions)39
3.2.3 暗门函数(Trapdoor
Functions)40
3.3 RSA加密法42
3.3.1 创建密钥42
3.3.2 使用RSA加密数据44
3.3.3 RSA的效率45
3.3.4 在真实世界中使用RSA46
3.3.5 身份认证中的RSA49
3.4 网络安全:HTTPS51
3.4.1 握手51
3.4.2 在HTTPS下传输数据53
3.5 共享密钥的问题解决了吗54
第4章 电影CGI57
4.1 传统动画软件59
4.1.1 数字图像是如何工作的59
4.1.2 颜色是如何定义的61
4.1.3 软件是如何制作cel
动画的61
4.1.4 从cel动画软件到
渲染式的2D图形69
4.2 3D CGI软件69
4.2.1 如何描述3D场景70
4.2.2 虚拟摄像机71
4.2.3 直接光照72
4.2.4 全局光照76
4.2.5 如何进行光线追踪76
4.2.6 全屏抗锯齿80
4.3 真实与模拟相结合81
4.4 理想化的电影级品质渲染82
第5章 游戏图形83
5.1 实时图形的硬件84
5.2 为什么游戏不使用射线追踪85
5.3 只有直线,没有曲线85
5.4 不使用射线追踪来进行投影86
5.5 渲染三角形87
5.5.1 画家算法88
5.5.2 深度缓冲89
5.6 实时光照90
5.7 阴影92
5.8 环境光照和环境遮挡94
5.9 纹理映射95
5.9.1 最邻近采样97
5.9.2 双线性过滤99
5.9.3 Mipmaps100
5.9.4 三线性过滤101
5.10 反射102
5.11 伪造曲线104
5.11.1 远距顶替物104
5.11.2 凹凸映射104
5.11.3 曲面细分105
5.12 实时抗锯齿107
5.12.1 超级采样107
5.12.2 多重采样109
5.12.3 后期处理抗锯齿109
5.13 渲染预算111
5.14 游戏图形展望112
第6章 数据压缩113
6.1 游程编码114
6.2 字典压缩116
6.2.1 基本方式116
6.2.2 哈夫曼编码118
6.3 重组数据以获得更好的压缩119
6.3.1 预测编码119
6.3.2 量化120
6.4 JPEG图像120
6.4.1 颜色的另一种存储方式121
6.4.2 离散余弦变换122
6.4.3 二维DCT125
6.4.4 对DCT处理结果进行
压缩128
6.4.5 JPEG图像质量131
6.5 压缩高清视频134
6.5.1 时间压缩134
6.5.2 MPEG-2视频压缩135
6.5.3 视频质量与时间压缩138
6.6 视频压缩的现在和未来139
第7章 搜索141
7.1 定义搜索问题141
7.2 将数据按序存放142
7.2.1 选择排序142
7.2.2 快速排序143
7.3 二分搜索146
7.4 索引148
7.5 散列150
7.6 网络搜索153
7.6.1 为抓取到的网页结果进行
排名153
7.6.2 高效地使用索引155
7.7 网络搜索的前景156
第8章 并发157
8.1 为何需要并发157
8.1.1 性能158
8.1.2 多用户环境158
8.1.3 多任务处理158
8.2 并发是如何出错的159
8.3 使并发安全162
8.3.1 只读数据162
8.3.2 基于事务的处理过程162
8.3.3 信号量163
8.4 无限等待的问题165
8.4.1 有序队列166
8.4.2 循环等待造成的饥饿166
8.5 信号量的性能问题168
8.6 并发的未来169
第9章 地图路径171
9.1 软件中对地图的定义171
9.1.1 最佳优先搜索174
9.1.2 重用之前的搜索结果177
9.2 一次找出所有最佳路径179
9.2.1 弗洛伊德算法179
9.2.2 存储路径方向182
9.3 路径查找的未来185