面试题答案
一键面试常见的数据加密算法
- AES(高级加密标准):对称加密算法,广泛应用于数据加密场景,密钥长度通常为128位、192位或256位,安全性较高。
- RSA:非对称加密算法,使用一对密钥(公钥和私钥),常用于数字签名、密钥交换等场景,密钥长度一般为1024位、2048位或更高。
- 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
函数完成加密操作,并返回加密后的数据。实际应用中,密钥管理等方面需要更严格的安全措施。