iOS AES(ECB + PKCS5Padding)

AES(高级加密标准)

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES又分多种加密格式和填充方式,如果加解密端采用不同的加密格式或填充方式,即使都是采用AES算法,同样无法解密成功。

下面推荐一个在线加密的网址,支持多种加密格式及填充方式的选择:在线加解密网址

加密格式:ECB, CBC, CTR, OFB, CFB
ECB方式不需要初始化向量。如果不是采用ECB,那么除了密钥之外,加解密放的初始化向量也必须一致。

填充方式:pkcs5padding, pkcs7padding(PKCS7Padding和PKCS5Padding是兼容的), zeropadding, iso10126, ansix923

如下代码主要针对ECB和pkcs5padding:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#import <CommonCrypto/CommonCryptor.h>
#import <CommonCrypto/CommonDigest.h>
#import "NSData+CommonCrypto.h"
#import "NSData+ZDAES256.h"
@implementation NSData (ZDAES256)
- (NSData *)encryptText:(NSString *)text key:(NSString *)key {
CCCryptorStatus status = kCCSuccess;
NSData *result = [[text dataUsingEncoding:NSUTF8StringEncoding]
dataEncryptedUsingAlgorithm:kCCAlgorithmAES128
key:key
initializationVector:nil // ECB加密不会用到iv
options:(kCCOptionPKCS7Padding | kCCOptionECBMode)
error:&status];
if (status != kCCSuccess) {
NSLog(@"加密失败:%d", status);
return nil;
}
return result;
}
@end

Demo下载

参考原文