MST

星途 面试题库

面试题:Objective-C 中常见的数据加密算法及实现方式

在Objective-C开发中,阐述至少两种常见的数据加密算法,并简单描述如何使用Objective-C代码实现其中一种算法进行数据加密操作。
12.2万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

常见的数据加密算法

  1. AES(高级加密标准):对称加密算法,广泛应用于数据加密场景,密钥长度通常为128位、192位或256位,安全性较高。
  2. RSA:非对称加密算法,使用一对密钥(公钥和私钥),常用于数字签名、密钥交换等场景,密钥长度一般为1024位、2048位或更高。
  3. DES(数据加密标准):对称加密算法,曾经广泛使用,但由于密钥长度较短(56位),安全性逐渐降低,现在较少使用。

使用AES算法进行数据加密操作的Objective - C代码实现

首先,需要导入CommonCrypto/CommonCryptor.h头文件来使用苹果提供的加密框架。

#import <CommonCrypto/CommonCryptor.h>
#import <UIKit/UIKit.h>

NSData *AESEncrypt(NSData *dataToEncrypt, NSString *key) {
    char keyPtr[kCCKeySizeAES256 + 1];
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [dataToEncrypt length];
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionPKCS7Padding,
                                          keyPtr,
                                          kCCKeySizeAES256,
                                          nil,
                                          [dataToEncrypt bytes],
                                          dataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    free(buffer);
    return nil;
}

使用示例:

NSString *originalString = @"Hello, World!";
NSData *dataToEncrypt = [originalString dataUsingEncoding:NSUTF8StringEncoding];
NSString *key = @"12345678901234567890123456789012"; // 256位密钥
NSData *encryptedData = AESEncrypt(dataToEncrypt, key);
if (encryptedData) {
    NSLog(@"加密后的数据: %@", encryptedData);
} else {
    NSLog(@"加密失败");
}

上述代码实现了使用AES256算法对字符串进行加密的功能,其中对密钥进行了处理,调用CCCrypt函数完成加密操作,并返回加密后的数据。实际应用中,密钥管理等方面需要更严格的安全措施。