对于iOS的Objective-C代码,可以使用CommonCrypto库来实现ECB模式的AES加密和解密。以下是一个示例代码:

加密:

#import <CommonCrypto/CommonCryptor.h>

// 数据块大小
size_t const kBlockSize = kCCBlockSizeAES128;

// 密码
NSString *password = @"PMe4bvLko";

// 原始数据
NSString *originalString = @"Hello World!";
NSData *originalData = [originalString dataUsingEncoding:NSUTF8StringEncoding];

// 填充原始数据
NSUInteger paddedDataLength = ((originalData.length + kBlockSize - 1) / kBlockSize) * kBlockSize;
NSMutableData *paddedData = [NSMutableData dataWithLength:paddedDataLength];
memcpy(paddedData.mutableBytes, originalData.bytes, originalData.length);

// 加密
NSMutableData *encryptedData = [NSMutableData dataWithLength:paddedDataLength + kBlockSize];
size_t encryptedDataLength;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                      kCCAlgorithmAES,
                                      kCCOptionECBMode,
                                      password.UTF8String,
                                      password.length,
                                      NULL,
                                      paddedData.bytes,
                                      paddedDataLength,
                                      encryptedData.mutableBytes,
                                      encryptedData.length,
                                      &encryptedDataLength);
if (cryptStatus == kCCSuccess) {
    encryptedData.length = encryptedDataLength;
    NSString *base64String = [encryptedData base64EncodedStringWithOptions:0];
    NSLog(@"%@", base64String);
} else {
    NSLog(@"加密失败");
}

解密:

// 密码
NSString *password = @"PMe4bvLko";

// 加密后的数据
NSString *base64String = @"加密后的数据";

// 解密
NSData *encryptedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
size_t decryptedDataLength;
NSMutableData *decryptedData = [NSMutableData dataWithLength:encryptedData.length];
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                      kCCAlgorithmAES,
                                      kCCOptionECBMode,
                                      password.UTF8String,
                                      password.length,
                                      NULL,
                                      encryptedData.bytes,
                                      encryptedData.length,
                                      decryptedData.mutableBytes,
                                      decryptedData.length,
                                      &decryptedDataLength);
if (cryptStatus == kCCSuccess) {
    decryptedData.length = decryptedDataLength;
    NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", decryptedString);
} else {
    NSLog(@"解密失败");
}

注意:上述代码中的"加密后的数据"是指由加密过程生成的base64编码字符串,需要替换为实际的加密后的数据。

这段代码使用了ECB模式和PKCS7Padding填充方式。将原始数据填充到128位的倍数,并使用密码进行加密。然后,将加密后的数据进行Base64编码,以便在字符串中进行传输。

解密过程与加密过程类似,先将Base64编码的字符串解码为NSData,然后使用相同的密码对解密后的数据进行解密。最后,将解密后的数据转换为NSString。

注意:ECB模式不是一种安全的加密模式,因为它没有使用初始化向量(IV),并且相同的原始数据块将产生相同的加密结果。推荐使用更安全的加密模式,如CBC模式

IOS OC代码模式ECB 填充pkcs5padding 数据块128 密码PMe4bvLko 偏移量无 输出base64 字符集UTF8 解密

原文地址: https://www.cveoy.top/t/topic/hIGx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录