简介
对称加密算法又称传统加密算法。
加密和解密使用同一个密钥。
对称加密算法示例
密钥:X
加密算法:每个字符+X
明文:Hello
密钥为 1时加密结果:Ifmmp
密钥为 2时加密结果:Jgnnq
优缺点
算法公开,计算量小,加密速度快,加密效率高
双方使用相同的钥匙,安全性得不到保证
注意事项
密钥的保密工作非常重要
密钥要求定期更换
经典加密算法
DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。
加密模式(最常用两种)
ECB:电子密码本,就是每个块都是独立加密的。
imageCBC:密码分组链接,使用一个密钥和一个初始化向量(IV)对数据执行加密转换。
image只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。
核心函数
/***
CCCrypt 对称加密算法的核心函数(加密/解密)
参数:
1.kCCEncrypt 加密/kCCDecrypt 解密
2.加密算法,默认使用的是 AES/DES
3.加密选项 ECB/CBC
kCCOptionPKCS7Padding CBC 的加密方式 并 使用PKCS7Padding的填充模式
kCCOptionPKCS7Padding | kCCOptionECBMode ECB 的加密方式 并 使用PKCS7Padding的填充模式
注:经查资料 AES算法下 PKCS5Padding 与 PKCS7Padding 兼容或相同,DES/3DES算法下 PKCS5Padding 等价与 PKCS7Padding
4.加密密钥
5.密钥长度
6.iv 初始化向量,ECB 不需要指定
7.加密的数据
8.加密的数据的长度
9.密文的内存地址
10.密文缓冲区的大小
11.加密结果大小
*/
/*!
@function CCCrypt
@abstract 一个接口来处理加密解密方式.
还可以使用方式二:下面会有示例说明 ,调用流程分几步 ,CCCrytorCreate(),
CCCryptorUpdate(), CCCryptorFinal(), and CCCryptorRelease().
@param op 操作类型解密或解密: kCCEncrypt or
kCCDecrypt.
@param alg 加解密使用的算法.
@param options 填充方式式通常是kCCOptionPKCS7Padding,默认分组模式cbc,.
@param key 密钥.
@param keyLength 密钥长度.
@param iv 加密使用的向量参数,cbc模式需要,16个字节,ecb模式不需要,.
@param dataIn 输入的数据.
@param dataInLength 输入的数据长度.
@param dataOut 输出的数据.
@param dataOutAvailable 输出数据时需要的可用空间大小.
@param dataOutMoved 成功之后实际占用的空间大小.
@result 结果在为CCCryptorStatus 枚举
*/
CCCryptorStatus CCCrypt(
CCOperation op, /* kCCEncrypt, 等. */
CCAlgorithm alg, /* kCCAlgorithmAES128, 等. */
CCOptions options, /* kCCOptionPKCS7Padding, 等. */
const void *key,
size_t keyLength,
const void *iv, /* 可选的向量 */
const void *dataIn, /*输入*/
size_t dataInLength,
void *dataOut, /* 输出 */
size_t dataOutAvailable,
size_t *dataOutMoved)
补充:
PKCS5Padding是PKCS7Padding的子集,填充值的算法都是一样的
PKCS5Padding:Block size必须是8个字节,
PKCS7Padding:Block size可以在1-255之间
网友评论