gpt4 book ai didi

objective-c - Objective-C 中的 AES 字符串加密

转载 作者:太空狗 更新时间:2023-10-30 03:24:08 24 4
gpt4 key购买 nike

我的 Objective-C 应用程序需要文本/字符串加密(特别是 )。

我知道 AES 是可供消费者使用的最安全的加密方法。我也了解如何将字符串转换为数据并返回......(只是一个初学者)。

很多关于 AES 加密的网页和问答都不清楚,也没有说明如何使用给定的代码。例如,网页可能会说:“这是代码……这是它的作用……”但没有解释如何使用它。

我通过大量研究找到了这段代码:

#import "<CommonCrypto/CommonCryptor.h>"
@implementation NSMutableData(AES)

对于加密:

- (NSMutableData*) EncryptAES:(NSString *)key {
char keyPtr[kCCKeySizeAES256+1];
bzero( keyPtr, sizeof(keyPtr) );

[key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding];
size_t numBytesEncrypted = 0;

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

NSMutableData *output = [[NSData alloc] init];

CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer, bufferSize, &numBytesEncrypted);

output = [NSMutableData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

if(result == kCCSuccess) {
return output;
}
return NULL;
}

解密:

- (NSMutableData*)DecryptAES: (NSString*)key andForData:(NSMutableData*)objEncryptedData {

char keyPtr[kCCKeySizeAES256+1];
bzero( keyPtr, sizeof(keyPtr) );

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF16StringEncoding];

size_t numBytesEncrypted = 0;

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer_decrypt = malloc(bufferSize);
NSMutableData *output_decrypt = [[NSData alloc] init];
CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted);

output_decrypt = [NSMutableData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];

if(result == kCCSuccess) {
return output_decrypt;
}
return NULL;
}
}

这是我做的代码,我想和上面的代码对应:

- (void)Encrypt {
//Convert NSString to NSData so that it can be used to encrypt the Input
NSString *Input = [Inputbox text];
NSData *InputData = [Input dataUsingEncoding:NSUTF8StringEncoding];
//What to do here
}

我如何使用这段代码、这些方法?它在我的实现文件中的什么位置?

最佳答案

靠近顶部的这一行表示您正在向 NSMutableData 添加 AES 功能:

@implementation NSMutableData(AES)

在 Objective-C 中,这称为类别;类别让您扩展现有的类。

此代码通常会放在名为 NSMutableData-AES.m 的文件中。还要创建一个头文件,NSMutableData-AES.h。它应该包含:

@interface NSMutableData(AES)
- (NSMutableData*) EncryptAES: (NSString *) key;
@end

在您的主文件中包含(#import)该 header 。在您的代码中添加对加密函数的调用:

NSData *InputData = [Input dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedData = [InputData EncryptAES:@"myencryptionkey"];

解密也类似。

关于objective-c - Objective-C 中的 AES 字符串加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com