IOS OC代码模式ECB 填充pkcs5padding 数据块128 密码PMe4bvLko 偏移量无 输出base64 字符集UTF8 解密
对于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模式
原文地址: https://www.cveoy.top/t/topic/hIGx 著作权归作者所有。请勿转载和采集!