Objective-C如何实现数据加密

发布时间:2025-02-13 03:00:12 作者:小樊
来源:亿速云 阅读:87

在Objective-C中,你可以使用CommonCrypto库来实现数据加密。CommonCrypto是一个C语言编写的加密库,它提供了多种加密算法,如AES、DES、RSA等。以下是一个使用AES加密和解密的例子:

首先,确保你的项目中已经导入了<CommonCrypto/CommonCryptor.h>头文件。

AES加密

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

@interface AESUtil : NSObject

+ (NSData *)aesEncryptData:(NSData *)data key:(NSData *)key iv:(NSData *)iv;

@end

@implementation AESUtil

+ (NSData *)aesEncryptData:(NSData *)data key:(NSData *)key iv:(NSData *)iv {
    size_t cryptSize = [data length] + kCCBlockSizeAES128;
    void *cryptData = malloc(cryptSize);
    
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding,
                                          [key bytes],
                                          [key length],
                                          [iv bytes],
                                          [data bytes],
                                          [data length],
                                          cryptData,
                                          cryptSize,
                                          &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        cryptData = realloc(cryptData, numBytesEncrypted);
        return [NSData dataWithBytesNoCopy:cryptData length:numBytesEncrypted];
    }
    
    free(cryptData);
    return nil;
}

@end

AES解密

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

@interface AESUtil : NSObject

+ (NSData *)aesDecryptData:(NSData *)data key:(NSData *)key iv:(NSData *)iv;

@end

@implementation AESUtil

+ (NSData *)aesDecryptData:(NSData *)data key:(NSData *)key iv:(NSData *)iv {
    size_t cryptSize = [data length] + kCCBlockSizeAES128;
    void *cryptData = malloc(cryptSize);
    
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES,
                                          kCCOptionPKCS7Padding,
                                          [key bytes],
                                          [key length],
                                          [iv bytes],
                                          [data bytes],
                                          [data length],
                                          cryptData,
                                          cryptSize,
                                          &numBytesDecrypted);
    
    if (cryptStatus == kCCSuccess) {
        cryptData = realloc(cryptData, numBytesDecrypted);
        return [NSData dataWithBytesNoCopy:cryptData length:numBytesDecrypted];
    }
    
    free(cryptData);
    return nil;
}

@end

使用示例

#import <Foundation/Foundation.h>
#import "AESUtil.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *originalString = @"Hello, World!";
        NSData *originalData = [originalString dataUsingEncoding:NSUTF8StringEncoding];
        
        NSString *keyString = @"1234567890123456"; // 16字节密钥
        NSString *ivString = @"1234567890123456";  // 16字节初始化向量
        
        NSData *keyData = [keyString dataUsingEncoding:NSUTF8StringEncoding];
        NSData *ivData = [ivString dataUsingEncoding:NSUTF8StringEncoding];
        
        NSData *encryptedData = [AESUtil aesEncryptData:originalData key:keyData iv:ivData];
        NSData *decryptedData = [AESUtil aesDecryptData:encryptedData key:keyData iv:ivData];
        
        NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
        NSLog(@"Decrypted String: %@", decryptedString);
    }
    return 0;
}

这个例子展示了如何使用AES算法对数据进行加密和解密。请注意,密钥和初始化向量的长度必须符合所选算法的要求。在这个例子中,我们使用了AES-128位加密,所以密钥和初始化向量的长度都是16字节。

推荐阅读:
  1. iOS 与 Android 间的交互差异有哪些
  2. iOS和Android的区别有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ios

上一篇:Objective-C中如何使用协议和分类

下一篇:Objective-C中如何使用ARC

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》