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);

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

相关内容

热门资讯

安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
避免在粘贴双引号时向VS 20... 在粘贴双引号时向VS 2022添加反斜杠的问题通常是由于编辑器的自动转义功能引起的。为了避免这个问题...
Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
omi系统和安卓系统哪个好,揭... OMI系统和安卓系统哪个好?这个问题就像是在问“苹果和橘子哪个更甜”,每个人都有自己的答案。今天,我...
原生ios和安卓系统,原生对比... 亲爱的读者们,你是否曾好奇过,为什么你的iPhone和安卓手机在操作体验上有着天壤之别?今天,就让我...
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...