iOS加密整理
2017-12-18 本文已影响20人
LeoZhang007
前言:之前很少接触加解相关的东西,最近准备系统的学习下,所有就有了这篇文章,也希望看到的大佬不吝赐教!感激不尽!
一些小的知识点:
- 对称密码与公钥密码(非对称加密)
- 对称密码(symmetric cryptography)是指在加密和解密时使用同一密钥的方式。
- 公钥密码(public-key cryptography)则是指在加密和解密时使用不同密钥的方式。因此公钥密码又称为非对称密码(asymmetric cryptography)。
2.DES(Data Encryption Standard)
DES是一种将64bit的明文加密成64bit的密文的对称密码算法,它的密钥长度是56bit。尽管从规格上来说,DES的密钥长度是64bit,但由于每隔7bit会设置一个用于错误检查的bit,因此实质上其密钥长度是56bit。
DES是以64bit的明文(bit序列)为一个单位来进行加密的,这个64bit的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码(block cipher),DES就是分组密码的一种。
DES每次只能加密64bit的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式(mode)。
- AES(Advanced Encryption Standard)是取代其前任标志(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中选出了一种名为Rijndael的对称密码算法,并将其确定为了AES。
- 三重DES的加密
三重DES的加密机制如图
明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56bit,因此三重DES的密钥长度就是56 * 3 = 168bit。
从图中我们可以发现,三重DES并不是进行三次DES加密(加密->加密->加密),而是加密->解密->加密的过程。在加密算法中加入解密操作让人感觉很不可思议,实际上这个方法是IBM公司设计出来的,目的是为了让三重DES能够兼容普通的DES。
- AES(Advanced Encryption Standard)
AES是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中选出了一种名为Rijndael的对称密码算法,并将其确定为了AES。
- 什么是Rijndael
Rijndael是由比利时密码学家Joan Daemen 和 Vincent Rijmen 设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。
Rijndael的分组长度为128bit,密钥长度可以以32bit为单位在128bit到256bit的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256bit三种)。
- 分组密码的模式
模式有很多种类,分组密码的主要模式有以下5种:
-
ECB模式:Electronic CodeBook mode(电子密码本模式)
在ECB模式中,将明文分组加密之后的结果直接转成为密文分组。
使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此ECB模式也称为电子密码模式。
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充(padding)。ECB模式的特点是所有模式中最简单的一种。ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的。
-
CBC模式:Cipher Block Chaining mode(密码分组链接模式)
-
CFB模式:Cipher FeedBack mode(密文反馈模式)
-
OFB模式:Output FeedBack mode(输出反馈模式)
-
CTR模式:CounteR mode(计数器模式)
- 明文分组与密文分组
明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。