AES:高度暗号化標準(のAdvanced Encryption Standard)。暗号では、また、ラインダール暗号化方式として知られている、それは米国連邦政府によって採用されたブロック暗号化規格です。この規格は、オリジナルのDESを置き換えるために使用され、それが広く分析し、マルチ世界中で使用されています。5年間の選定プロセスの後、2001年11月26日に高度暗号化標準は、FIPS PUBの197で標準技術の米国国立研究所(NIST)によって発行され、そして、2002年5月26日効果的な標準規格となりました。2006年には、高度暗号化標準は、最も人気のある対称鍵暗号化アルゴリズム(Baiduは見つけることができる)の一つとなっています。
ステップの暗号化:NSDataのタイプによって得られたAES暗号化文字列は、その後、暗号化されたNSData Base64でトランスコードの種類は、最終的な文字列を取得します。
復号化は、以下の工程:Base64文字列が復号復号化した後、得られた元の文字列を解読します。
次のように最初に終了し、.hファイルをNSDataの+ JKEncryptカテゴリを作成します。
#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ファイルと
#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;
}