前言

随着计算机及网络技术的发展,信息安全,特别是各行各业信息系统的安全成为社会关注的焦点,直接影响国家的安全和社会的稳定。

信息安全技术是核心技术中的核心。信息安全,大到国防安全,小到个人银行账号,一出事对国家和个人都是大事。网络世界黑白难分,暗礁险滩出入相随,保护信息安全是每个IT人员必须重视的课题,一定要保证所开发的信息系统是安全的,经得起攻击。作为一个IT人,无论你是在Linux下开发,还是在Windows下开发,无论是用C/C++开发,还是Java开发,或者用C#开发,都应该掌握信息安全技术,这项技术就像我们大学学习的数据结构、离散数学那样,是任何信息系统的基础。举一个简单的例子,你在开发一个信息管理系统,总不能把用户的登录口令以明文的方式保存在数据库中吧。

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

为何要写一本密码书?答案是市面上的密码书实在太学院派或太工程派。本书不同于以往的密码书,很多学院派的密码书对许多常用或不常用的密码算法只是蜻蜓点水、浅尝辄止地介绍,而没有进行上机的代码实现,让学生看了似懂非懂。而实践派的密码书从头到尾只是几个业界算法库的函数介绍,然后调用,接着就结束了,让学生看了只知其然,而不知其所以然。

本书来自于拥有几十年经验的密码开发工程师一手资料,知道哪些算法是重要并且常用的,瞄准这几个常用的算法(本书全方面地从理论到实现介绍SM2/SM3/SM4算法),循序渐进(甚至从小学数学讲起),详细地介绍其原理,到自主实现,再到业界库的调用(工作中必定会碰到,一定要在找工作之前学习),对于有理解难点的地方会重点介绍。通过本书,读者不仅能理解原理,还能自己上机实现,还可以熟练调用业界知名算法库,做到从理论到实践的全线精通,这一点是市面上99%的密码书都无法做到的。可以说,学完本书,立即上岗,毫无压力!

本书首先从各大主流加解密算法的原理入手,然后用C/C++语言手工实现该算法(这是理解算法理论的必要过程),最后从C/C++提供的主流加解密框架和函数库入手熟悉其使用。记住,会使用函数库是最基本的技能,真正的专家是要会设计和实现算法库,因为很多场合,尤其是国防军工领域,很多敏感的、需要高性能的地方都要自己实现加解密算法,而不能照搬别人的函数库,所以不理解原理是不可以的。C/C++作为信息系统开发的主流语言,其信息安全需求十分旺盛,在C/C++开发的信息系统中,熟练运用信息安全技术迫在眉睫。

作者长期工作在信息安全开发一线,有着较为丰富的密码算法使用经验,经常使用各种算法来保护数据安全,自己平时也积累了不少技术心得和开发经验,但这些技术比较零散,系统性不强,借此机会,将这些内容整理成一个完整的系统,并且将所涉及的技巧和方法讲述出来,是一件很荣幸的事。作者所做的工作来源于长期的实践,对于密码安全的开发技巧都从基本的内容讲起,然后稍微提高,所以本书可以说是“贴近实战”。软件开发是一门需要实践的技术,本书对理论尽量用简单易懂的语言介绍,然后配合相应的实例,避免空洞的说教,对于其中的技术细节,都尽量讲深、讲透,为读者提供翔实可靠的技术资料。

实践反复告诉我们,只有把关键核心技术掌握在自己手中,才能从根本上保障国家经济安全、国防安全和其他安全。作为一名老工程师,真心希望每个IT从业者都能静下心来学一学密码学。

密码学在信息技术应用中占有重要的地位,国家也日益重视信息安全,密码技术成为开发者经常会碰到的问题。针对当前密码学领域的书,要么理论太枯燥,要么太简单笼统,无法应对一线实战开发的情况,因此就有了这么一本面对初中级程序员的密码学开发方面的书。很多人学习密码学主要是应用密码算法来保护数据安全,实际开发过程中也是如此,所以学习密码学的度很有讲究,太深没必要,太浅没什么用。本书在学习深度方面也经过了仔细斟酌。