问题描述
我正在使用AES加密/解密以及IV方法来为使用该应用程序的用户提供更高的安全性。为此,我设计了一个用于处理加密/解密过程的通用类。常见的类是:
Crypt.h
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
NS_ASSUME_NONNULL_BEGIN
@interface Crypt : NSObject
+ (NSData *)aes128Data:(NSData *)dataIn
operation:(Ccoperation)operation // kCC Encrypt,Decrypt
key:(NSData *)key
options:(Ccoptions)options // kCcoption PKCS7Padding,ECBMode,iv:(NSData *)iv
error:(NSError **)error;
+ (NSData *)dataFromHexString:(Nsstring *)hexString;
@end
NS_ASSUME_NONNULL_END
Crypt.m
#import "Crypt.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
@implementation Crypt
+ (NSData *)aes128Data:(NSData *)dataIn
operation:(Ccoperation)operation // kCC Encrypt,iv:(NSData *)iv
error:(NSError **)error
{
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0;
NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128];
ccStatus = CCCrypt( operation,kCCAlgorithmAES,options,key.bytes,key.length,iv.bytes,dataIn.bytes,dataIn.length,dataOut.mutableBytes,dataOut.length,&cryptBytes);
if (ccStatus == kCCSuccess) {
dataOut.length = cryptBytes;
}
else {
if (error) {
*error = [NSError errorWithDomain:@"kEncryptionError"
code:ccStatus
userInfo:nil];
}
dataOut = nil;
}
return dataOut;
}
+ (NSData *)dataFromHexString:(Nsstring *)hexString {
char buf[3];
buf[2] = '\0';
unsigned char *bytes = malloc([hexString length]/2);
unsigned char *bp = bytes;
for (CFIndex i = 0; i < [hexString length]; i += 2) {
buf[0] = [hexString characteratIndex:i];
buf[1] = [hexString characteratIndex:i+1];
char *b2 = NULL;
*bp++ = strtol(buf,&b2,16);
}
return [NSData dataWithBytesNocopy:bytes length:[hexString length]/2 freeWhenDone:YES];
}
@end
为了在我的 view controller.m类中使用,我调用了如下所示的函数:
- (IBAction)encryptAction:(id)sender {
Nsstring *dataHexString = @"EA010B23CDA9B16F0001020304050607";
Nsstring *keyHexString = @"000102030405060708090A0B0C0D0E0F";
Nsstring *ivHexString = @"00102030405060708090A0B0C0D0E0F0";
NSLog(@"dataHexString: %@",dataHexString);
NSLog(@"keyHexString: %@",keyHexString);
NSLog(@"ivHexString: %@",ivHexString);
NSData *data = [Crypt dataFromHexString:dataHexString];
NSData *key = [Crypt dataFromHexString:keyHexString];
NSData *iv = [Crypt dataFromHexString:ivHexString];
NSLog(@"data: %@",data);
NSLog(@"key: %@",key);
NSLog(@"iv: %@",iv);
NSError *error;
NSData *encryptedData = [Crypt
aes128Data:data
operation:kCCEncrypt
key:key
options:0
iv:iv
error:&error];
NSLog(@"encryptedData %@",encryptedData);
}
- (IBAction)decryptAction:(id)sender {
Nsstring *dataHexString = @"EA010B23CDA9B16F0001020304050607";
Nsstring *keyHexString = @"000102030405060708090A0B0C0D0E0F";
Nsstring *ivHexString = @"00102030405060708090A0B0C0D0E0F0";
NSLog(@"dataHexString: %@",iv);
NSError *error;
NSData *encryptedData = [Crypt
aes128Data:data
operation:kCCDecrypt
key:key
options:0
iv:iv
error:&error];
NSLog(@"DecryptedData %@",encryptedData);
}
当我运行加密和解密时,我得到的NSLOG值是:
encryptedData {length = 16,bytes = 0xb773c36749e87d3f8fed98fe52026a15}
DecryptedData {length = 16,bytes = 0xff4968ae8f53a8b5fa232bac9bc30890}
所以我如何比较解密后的数据与我们传递的数据相同,以及如何处理通过AES和IV方法传递用于加密的PlainText的代码
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)