-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathNSData+KKAES.m
103 lines (95 loc) · 3.76 KB
/
NSData+KKAES.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// NSData+KKAES.m
// SecurityiOS
//
// Created by cocoa on 16/12/15.
// Copyright © 2016年 [email protected]. All rights reserved.
//
#import "NSData+KKAES.h"
#import <CommonCrypto/CommonCryptor.h>
@implementation NSData (KKAES)
- (NSData *)AES_CBC_EncryptWith:(NSData *)key iv:(NSData *)iv
{
NSData *retData = nil;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
bzero(buffer, bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
key.bytes, key.length,
iv.bytes,
self.bytes, self.length,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
retData = [NSData dataWithBytes:buffer length:numBytesEncrypted];
}
free(buffer);
return retData;
}
- (NSData *)AES_CBC_DecryptWith:(NSData *)key iv:(NSData *)iv
{
NSData *retData = nil;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
bzero(buffer, bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
key.bytes, key.length,
iv.bytes,
self.bytes, self.length,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
retData = [NSData dataWithBytes:buffer length:numBytesEncrypted];
}
free(buffer);
return retData;
}
- (NSData *)AES_ECB_EncryptWith:(NSData *)key
{
NSData *retData = nil;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
bzero(buffer, bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding|kCCOptionECBMode,
key.bytes, key.length,
NULL,
self.bytes, self.length,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
retData = [NSData dataWithBytes:buffer length:numBytesEncrypted];
}
free(buffer);
return retData;
}
- (NSData *)AES_ECB_DecryptWith:(NSData *)key
{
NSData *retData = nil;
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
bzero(buffer, bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding|kCCOptionECBMode,
key.bytes, key.length,
NULL,
self.bytes, self.length,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
retData = [NSData dataWithBytes:buffer length:numBytesEncrypted];
}
free(buffer);
return retData;
}
@end