最美的时光|暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

密码主要用于军事 , 无论古今中外 , 概莫能外 。 据《六韬》所载 , 3000年前由姜子牙发明了“阴符” , 这就是最初的密码 。 后被广泛运用于我国古代维护国家安全的军事活动和情报活动中 。
西方也同样如此 , 著名的凯撒密码(Caesar cipher) , 在公元前1世纪 , 就被用于高卢战争中 , 这是一种简单易行的单字母替代密码 。 战前凯撒设计了一种对重要的军事信息进行加密的方法 , 即使这些信息被截获 , 敌方也不一定能看懂 。 其实 , 凯撒密码字母移位的位数就是一种简单易行的单字母替代密码 。 密码轮是利用凯撒密码来应用的 , 通过把字母移动一定的位数来实现加密和解密 。 例如 , 当偏移量是3的时候 , 所有的字母A将被替换成D , B变成E , 以此类推 。
最美的时光|暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?现如今信息时代 , 加密技术更是无处不在 , 比如邮箱、网盘等 , 但是关于它的实现原理 , 如何实现 , 你又知道多少呢?由于之前一段时间在研究国密算法的Java实现 , 网上找了不少的资料 , 同时也学习了加密的原理和概念 , 自己整理了一下网上的资料和自己的理解 。 这一块东西在日后的工作中是避不开的 , 多了解一下总有好处 , 而不是只会简单的调用encrypt和decrypt方法 , 知其然的同时也要知其所以然 。
在讲解国密之前 , 我们首先要来了解一下关于加密的一些基本的知识 。首先加密被分为两大类 , 也就是 单向加密和双向加密,双向加密又可被细分为对称加密和非对称加 密 , 这两种加密中又存在多种不同的模式 。
【单向加密】
单向加密可以简单的理解成为只能加密 , 没法解密 , 最典型的例子就是 散列算法 (Hash Function) , 也就是 摘要算法(杂凑算法)

这是一种从任意文件中创造小的数字「指纹」的方法 。 与指纹一样 , 散列算法就是一种以较短的信息来保证文件唯一性的标志 , 这种标志与文件的每一个字节都相关 , 而且难以找到逆向规律 。 因此 , 当原有文件发生改变时 , 其标志值也会发生改变 , 从而告诉文件使用者当前的文件已经不是你所需求的文件 。
这个过程是不可逆的 , 你摘要了一段东西就意味着你丢弃了原文 , 你无法用摘要去还原原文来 , 比如“我今天去二楼食堂吃了杂粮煎饼” , 摘要出来是“我吃了煎饼” , 你无法从后者去推断出原文 。 但是你用同样的算法对同样的内容 , 计算出的结果是肯定一致的 。 这只是个简单的例子 , 实际的摘要算法要更复杂 , 里面有自己的算法 。 你不仅不可能根据一段通过散列算法得到的指纹来获得原有的文件 , 也不可能简单地创造一个文件并让它的指纹与一段目标指纹相一致 。
一个优秀的散列算法需要有以下几个特性:
最美的时光|暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?摘要算法的用途非常广 , 我们身边有很多不经意的地方都用到了这个东西 , 现在大部分的网络部署和版本控制工具都在使用散列算法来保证文件可靠性 。 而另一方面 , 我们在进行文件系统同步、备份等工具时 , 使用散列算法来标志文件唯一性能帮助我们减少系统开销 , 这一点在很多云存储服务器中都有应用 。
现在的QQ、QQ邮箱、百度网盘之类的都有用到这一个技术 , 否则为什么我们传一个几个G的文件只需要几秒钟 , 因为根据文件计算出来的hash值 , 在服务器上找到了同样的文件 , 直接从服务器上拉取即可 , 不需要再上传 。 所以网盘里的资源你再怎么改名字 , 藏的再深 , 都是没有用的 , 你改变不了散列值 , 大家分享来分享去 , 他们不需要点开来看你到底是什么视频内容 , 只要抓到一个 , 然后就把所有散列值一样的都给封掉 , 变成九秒教育短片 。