AES: Advanced Encryption Standard (Advanced Encryption Standard). In cryptography, also known as Rijndael encryption method, it is a block encryption standard adopted by the US federal government. This standard is used to replace the original DES, it has been widely analyzed and multi- used around the world. After a five-year selection process, the Advanced Encryption Standard on November 26, 2001 issued by the US National Institute of Standards and Technology (NIST) in the FIPS PUB 197, and became effective standards in 2002, May 26. In 2006, the Advanced Encryption Standard has become one of the most popular symmetric key encryption algorithm (Baidu can be found).
Step encryption: AES encryption string obtained through NSData type, then the type of the encrypted NSData Base64 transcoding obtain the final string.
Decryption steps of: Base64 string to be decrypted decoded and then decrypt the original string obtained.
First create a NSData + JKEncrypt category, finished the .h file as follows:
#import <Foundation/Foundation.h>
@interface NSData (JKEncrypt)
/**
* 利用AES加密数据
*
* @param key key
* @param iv iv description
*
* @return data
*/
- (NSData *)jk_encryptedWithAESUsingKey:(NSString*)key andIV:(NSData*)iv;
/**
* @brief 利用AES解密据
*
* @param key key
* @param iv iv
*
* @return 解密后数据
*/
- (NSData *)jk_decryptedWithAESUsingKey:(NSString*)key andIV:(NSData*)iv;
/**
* 利用3DES加密数据
*
* @param key key
* @param iv iv description
*
* @return data
*/
- (NSData *)jk_encryptedWith3DESUsingKey:(NSString*)key andIV:(NSData*)iv;
/**
* @brief 利用3DES解密数据
*
* @param key key
* @param iv iv
*
* @return 解密后数据
*/
- (NSData *)jk_decryptedWith3DESUsingKey:(NSString*)key andIV:(NSData*)iv;
.m file into the appropriate header files corresponding to this implementation and
#import "NSData+JKEncrypt.h"
#import <CommonCrypto/CommonCryptor.h>
@implementation NSData (JKEncrypt)
/**
* 利用AES加密数据
*
* @param key key
* @param iv iv description
*
* @return data
*/
- (NSData*)jk_encryptedWithAESUsingKey:(NSString*)key andIV:(NSData*)iv {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
size_t dataMoved;
NSMutableData *encryptedData = [NSMutableData dataWithLength:self.length + kCCBlockSizeAES128];
CCCryptorStatus status = CCCrypt(kCCEncrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithmAES128,
kCCOptionPKCS7Padding, // Padding option for CBC Mode
keyData.bytes,
keyData.length,
iv.bytes,
self.bytes,
self.length,
encryptedData.mutableBytes, // encrypted data out
encryptedData.length,
&dataMoved); // total data moved
if (status == kCCSuccess) {
encryptedData.length = dataMoved;
return encryptedData;
}
return nil;
}
/**
* @brief 利用AES解密据
*
* @param key key
* @param iv iv
*
* @return 解密后数据
*/
- (NSData*)jk_decryptedWithAESUsingKey:(NSString*)key andIV:(NSData*)iv {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
size_t dataMoved;
NSMutableData *decryptedData = [NSMutableData dataWithLength:self.length + kCCBlockSizeAES128];
CCCryptorStatus result = CCCrypt(kCCDecrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithmAES128,
kCCOptionPKCS7Padding, // Padding option for CBC Mode
keyData.bytes,
keyData.length,
iv.bytes,
self.bytes,
self.length,
decryptedData.mutableBytes, // encrypted data out
decryptedData.length,
&dataMoved); // total data moved
if (result == kCCSuccess) {
decryptedData.length = dataMoved;
return decryptedData;
}
return nil;
}
/**
* 利用3DES加密数据
*
* @param key key
* @param iv iv description
*
* @return data
*/
- (NSData*)jk_encryptedWith3DESUsingKey:(NSString*)key andIV:(NSData*)iv {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
size_t dataMoved;
NSMutableData *encryptedData = [NSMutableData dataWithLength:self.length + kCCBlockSize3DES];
CCCryptorStatus result = CCCrypt(kCCEncrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithm3DES,
kCCOptionPKCS7Padding, // Padding option for CBC Mode
keyData.bytes,
keyData.length,
iv.bytes,
self.bytes,
self.length,
encryptedData.mutableBytes, // encrypted data out
encryptedData.length,
&dataMoved); // total data moved
if (result == kCCSuccess) {
encryptedData.length = dataMoved;
return encryptedData;
}
return nil;
}
/**
* @brief 利用3DES解密数据
*
* @param key key
* @param iv iv
*
* @return 解密后数据
*/
- (NSData*)jk_decryptedWith3DESUsingKey:(NSString*)key andIV:(NSData*)iv {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
size_t dataMoved;
NSMutableData *decryptedData = [NSMutableData dataWithLength:self.length + kCCBlockSize3DES];
CCCryptorStatus result = CCCrypt(kCCDecrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithm3DES,
kCCOptionPKCS7Padding, // Padding option for CBC Mode
keyData.bytes,
keyData.length,
iv.bytes,
self.bytes,
self.length,
decryptedData.mutableBytes, // encrypted data out
decryptedData.length,
&dataMoved); // total data moved
if (result == kCCSuccess) {
decryptedData.length = dataMoved;
return decryptedData;
}
return nil;
}