当前位置:首页 > 短网址资讯 > 正文内容

FT12短网址:深入浅出,解析AES算法

www.ft12.com7年前 (2017-07-25)短网址资讯2580

AES算法

高档加密标准(Advanced Encryption Standard,AES)是美帝2001年发布的块加密算法,AES是归于块加密算法结构中的一个组件,所以了解AES的关键是搞清楚块加密算法。(块加密算法是一个“框”,AES只是“框”中的一个东西)

块加密算法作业原理

块加密算法也叫分组密码作业形式(block mode of operation)它会把明文按等长的块(Block)分组然后使用某种加密算法进行加密——AES就归于“某种加密算法”中的一种。用一幅图表明二者关系:

块加密算法有三个关键部分

  • 填充方法,负责把明文切分红一块一块的。块加密请求数据一定要符合块巨细,以AES为例它规则每个数据块的巨细是128个bit位(16字节),假如数据缺乏16字节那么必须**填充**到16字节。填充的数据是字节长度,比方一个5字节的块需要填充到16个字节,那么剩余的9个字节就全部写上09 09 09……。 PKCS5Padding和PKCS7Padding是别离出在不同标准的两个标准,PKCS5规则了块巨细是8字节;PKCS7没有约束。因为AES已经约束了块的巨细,所以它们两个在AES里边本来没有啥区别。所以在Java里边只提供了AES+PKC5Padding(AES+PKCS7Padding,这个说法不对,AES已经约束了块巨细)。

  • 加密算法,负责对每一块的明文进行加密。对算法输入明文和密钥,算法输出加密后的密文块,多见的算法是AES、DES。

  • 作业方法,块加密十分灵活使用不同的作业形式能够完成**并行、密文可变(每次加密得到的密文都不一样)、容错**

块加密算法的五种作业方法

按照块加密算法的不同作业形式多见的有5种(为了简化疑问我只贴加密进程):

  • 电子密码本(ECB,Electronic codebook)

Key是密钥,Plaintext是明文,中心的Block Cipher Encryption是加密算法(比方AES即是其中一种)。密钥和明文作为输入经过加密以后得到密文——Ciphertext。ECB作业形式十分简略,能够并行处理;一个线程负责把数据切分红N块后由N个线程同时进行加密。它的缺点是一样的密钥每次执行加密出来的数据都是一样的。正常人看——比方我,这太正常了,可是“密码专家”们认为这太弱鸡了(囧)。所以他们设计了一种格外的算法,经过一个叫“初始向量(IV,Initialization Vector)”的变量让每次进行加密得到的密文都不一样(即便密钥一样)。剩余的4种块作业形式都归于这种牛B的类型。

  • 密码块链接(CBC,Cipher-block chaining)

这里的输入多了一个叫Initialization Vector(IV)的变量;明文和IV异或以后经过作为加密算法的一个变量输入,密钥作为另一个变量输入。CBC加密算法是一个串行算法,第二块的加密依赖于榜首块密文作为IV。所以核算它的时分只能按部就班一块一块的核算。

  • 密文反应(CFB,Cipher feedback)

之前的块加密都没有处理容错疑问——假如我一个数据块坏掉了那么能不能解密出其他的数据块。所以就有了CFB作业形式,注意调查上图,解密的时分假如榜首个密文块损坏那么能够无视这块内容,直接用第二个密文作为输入对第三个密文块进行解密

  • 输出反应形式(OFB,Output feedback)

CBC虽然狂屌炸(每次都能算出不同的密文)可是不能并行,对于“时间即是金钱”的核算机来说是无法容忍的。所以就有了榜首次改善——OFB。注意IV和密钥经过加密后这里是能够并行的,其中一个线程用于和明文的异或;一个线程能够立马核算“下次”加密。

  • 计数器形式(CTR,Counter mode)

OFB算法的并行度太低,只是完成一部分并行,所以就有了第二次改善——CTR算法,同时保证了并行度和密文可变性CTR算法中的IV变成了两部分,榜首个是Nonce能够是一个随机序列,第二部分是计数器(Countter),是一个递加的数字。所以加密的时分经过组合Nonce和核算器就能够对得到有规则可是不一样的(每次密文都不同的关键是IV的可变)“IV”

总结

从三个维度了解五种作业形式——密文是不是固定、是不是能够并行、有没有容错

  • ECB密文固定,全并行

  • CBC密文可变,不行并行

  • CFB密文容错,密文可变,不行并行

  • OFB密文可变,部分并行

  • CTR密文可变,全并行

需要注意的是除非数据量格外大不然我们不用在乎是不是并行;容错在小数据量的时分也凸显不出效果,所以CBC一般是最佳的挑选。

如何跨言语

很多朋友都碰到一个言语写的AES加密在另个一言语解密不了的疑问,究其原因是因为底子没有了解AES的作业形式(也许即是Google了一下AES加密,然后代码贴上收工)。所以我觉得跨言语的榜首步不是找到一种能在一切言语通用的作业形式——一切作业形式每个言语几乎都支持;而是搞清楚你加密出来的数据是那种作业形式,有没有用到IV?IV是经过啥方法传递给对方的?比方下面的Java代码:

我使用了CBC加密形式,这种形式涉及到IV,我们能够用一个固定的IV(比方用key作为IV)——可是意味着没有了CBC的优点,密文可变。所以我用一个随机16字节作为IV,回来的时分把它作为榜首个数据块;解密的时分只要取出榜首个数据块作为IV,然后再对余下的数据进行解密。


假如我们不指定IV参数(init函数的第三个参数),那么iv即是一个随机数。Java是不会主动把IV附加到密文上,所以这种加密出来的数据是谁也没有办法解出来的。




扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_346.html

标签: AES算法
分享给朋友:

相关文章

给人工智能降点温:深度学习不是万能良药

给人工智能降点温:深度学习不是万能良药

策划|FT12短网址 译者|短链接 近几年,深度学习已经进入一定程度的狂热状态,人们正试图用这个技术解决每一个问题。然而,深度学习真是万能的吗?阅读此文后,你便能够从深层理解为什么深度学习并不是想象的那般“...

记一次go程序优化实践,获得了3倍性能的提升以及学会了on-cpu/off-cpu火焰图的使用

记一次go程序优化实践,获得了3倍性能的提升以及学会了on-cpu/off-cpu火焰图的使用

先把结论列在前面:1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。2.on-cpu/off-cpu火焰图...

PHP 进阶之路 - 亿级 pv 网站架构实战之性能压榨

本博客并非全部原创,其实是一个知识的归纳和汇总,里面我引用了很多网上、书上的内容。也给出了相关的链接。本文涉及的知识点比较多,大家可以根据关键字去搜索相关的内容和购买相应的书籍进行系统的学习。不对的地方大家予以批评指正。有人给我留言说,亿级...

IIS7.5优化,支持同时10万个请求

IIS7.5优化,支持同时10万个请求

背景:       由于短网址站的并发量很大,特别是晚上21:00左右,用户访问非常集中,这时候,如何解决高并发成了一个难题,因此才有后面这篇文章。       ...

暴涨520万倍,比特币还能买吗?

暴涨520万倍,比特币还能买吗?

暴涨520万倍,比特币还能买吗?原上草最近,比特币疯狂上涨,很多网友纷纷来信咨询,问草哥还能不能买。前几天,比特别价格首次突破4000美元,相当于人民币接近3万元一枚。2009年刚出来的时候,1美元可以买1300枚比特币,如今价值超过400...

META标签指南:哪些meta标签该用哪些不该用?

META标签指南:哪些meta标签该用哪些不该用?

META标签是网页代码中HEAD区的一个关键标签,其提供的信息虽然用户不可见,但却是文档的最基本的元信息。说起meta标签,许多SEOer的第一反应就是K与D:keywords和description。这两种短链接是在优化过程中最常用的也是...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。