AES128加密CBC/NoPadding Objective-C
创始人
2024-07-29 12:30:27
0

以下是一个使用Objective-C实现AES128加密CBC/NoPadding的示例代码:

#import 

NSData *AES128EncryptCBCNoPadding(NSString *key, NSString *iv, NSString *plainText) {
    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
    NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
    NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    
    size_t bufferSize = plainData.length + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t encryptedSize = 0;
    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                     keyData.bytes, keyData.length,
                                     ivData.bytes,
                                     plainData.bytes, plainData.length,
                                     buffer, bufferSize, &encryptedSize);
    
    if (result == kCCSuccess) {
        NSData *encryptedData = [NSData dataWithBytesNoCopy:buffer length:encryptedSize];
        return encryptedData;
    }
    
    free(buffer);
    return nil;
}

NSString *AES128DecryptCBCNoPadding(NSString *key, NSString *iv, NSData *encryptedData) {
    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
    NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
    
    size_t bufferSize = encryptedData.length + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t decryptedSize = 0;
    CCCryptorStatus result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                     keyData.bytes, keyData.length,
                                     ivData.bytes,
                                     encryptedData.bytes, encryptedData.length,
                                     buffer, bufferSize, &decryptedSize);
    
    if (result == kCCSuccess) {
        NSData *decryptedData = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
        NSString *decryptedText = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
        return decryptedText;
    }
    
    free(buffer);
    return nil;
}

使用示例:

NSString *key = @"0123456789abcdef";
NSString *iv = @"0123456789abcdef";
NSString *plainText = @"Hello, World!";
    
NSData *encryptedData = AES128EncryptCBCNoPadding(key, iv, plainText);
NSString *encryptedText = [encryptedData base64EncodedStringWithOptions:0];
NSLog(@"Encrypted Text: %@", encryptedText);
    
NSString *decryptedText = AES128DecryptCBCNoPadding(key, iv, encryptedData);
NSLog(@"Decrypted Text: %@", decryptedText);

请注意,这只是一个简单的示例代码,并不考虑错误处理和安全性。如果要在实际应用中使用加密算法,请确保采取适当的安全措施。

相关内容

热门资讯

Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
Android - 无法确定任... 这个错误通常发生在Android项目中,表示编译Debug版本的Java代码时出现了依赖关系问题。下...
Android - NDK 预... 在Android NDK的构建过程中,LOCAL_SRC_FILES只能包含一个项目。如果需要在ND...
Akka生成Actor问题 在Akka框架中,可以使用ActorSystem对象生成Actor。但是,当我们在Actor类中尝试...
Agora-RTC-React... 出现这个错误原因是因为在 React 组件中使用,import AgoraRTC from “ago...
Alertmanager在pr... 首先,在Prometheus配置文件中,确保Alertmanager URL已正确配置。例如:ale...
Aksnginxdomainb... 在AKS集群中,可以使用Nginx代理服务器实现根据域名进行路由。以下是具体步骤:部署Nginx i...
AddSingleton在.N... 在C#中创建Singleton对象通常是通过私有构造函数和静态属性来实现,例如:public cla...
Alertmanager中的基... Alertmanager中可以使用repeat_interval选项指定在一个告警重复发送前必须等待...