首先
CommonCryptor
主要提供的是对称加密相关接口。包含多种堆成加密算法包含AES DES等等。我们直接通超过创建方式然后对入参一一进行解释。
创建方式
它们有两种使用的方式去获取加解密处理的数据。核心函数分别是
- CCCrytorCreate() | CCCryptorCreateWithMode,CCCryptorUpdate() ,CCCryptorFinal() , and CCCryptorRelease();
- CCCrypt(). //对上面函数的封装。
方法1 CCCrypt()
CCCryptorStatus CCCrypt(
CCOperation op, /* 加密or解密. */
CCAlgorithm alg, /* kCCAlgorithmAES128, 加密方式 */
CCOptions options, /* kCCOptionPKCS7Padding,填充模式,默认的是 CBC 模式,CBC模式则需设置iv向量。不设置则为NULL,
若使用ECB模式,则为kCCOptionPKCS7Padding | kCCOptionECBMode.iv向量无效 */
const void *key, /* 秘钥*/
size_t keyLength, /*秘钥长度 */
const void *iv, /* CBC模式下的初始向量。ECB模式下无效,可设置为NULL, */
const void *dataIn, /* 明文数据 */
size_t dataInLength, /* 明文数据长度. */
void *dataOut, /* 输出数据的缓冲区 */
size_t dataOutAvailable, /* 输出数据的缓冲区大小. */
size_t *dataOutMoved) /* 成功返回后的字节数. */
1.1 CCOperation op 加密还是解密
enum {
kCCEncrypt = 0, //加密
kCCDecrypt, // 解密
};
typedef uint32_t CCOperation;
1.2 CCAlgorithm alg 加密方式
enum {
kCCAlgorithmAES128 = 0,
kCCAlgorithmAES = 0,
kCCAlgorithmDES,
kCCAlgorithm3DES,
kCCAlgorithmCAST,
kCCAlgorithmRC4,
kCCAlgorithmRC2,
kCCAlgorithmBlowfish
};
typedef uint32_t CCAlgorithm;
1.3 CCOptions options 填充模式
enum {
/* options for block ciphers */
kCCOptionPKCS7Padding = 0x0001,
kCCOptionECBMode = 0x0002
/* stream ciphers currently have no options */
};
typedef uint32_t CCOptions;
目前苹果开放的只有这两种。可能与java端不一致。
加密模式有四种,分别是
- ECB(Elecyronic Code Book,电子密码本)、
- CBC(Cipher Block Chaining,加密块链)、
- CFB(Cipher FeedBack Mode,加密反馈)、
- OFB(Output FeedBack,输出反馈)。
填充模式:
- 若使用CBC模式,则为kCCOptionPKCS7Padding
- 若使用ECB模式,则为kCCOptionPKCS7Padding | kCCOptionECBMode.
ECB:将每一个数据块单独加密后,在拼接。 解密也是同样的道理。先拆分数据库,再单独解密
CBC:加密每一个数据块,都会与上一个数据块有联系。密码块链,使用秘钥和一个向量对数据执行加密转换, 能够保证密文的完整性。如果一个数据改变了。后面数据都会造成改变。
iOS加密算法ECB CBC区别
- 参考资料
iOS加密解密多种模式和算法说明
网友评论