阿拉伯字符的 AES 加密 - Objective C
AES Encryption of Arabic characters - Objective C
我有一个加密函数,可以获取数据和密钥,内部 iv 和 returns 是一个加密字符串。我可以加密每个只包含英文字符但不包含阿拉伯字符的字符串。这是我的职能。请帮我找出问题所在。谢谢
-(NSString*)加密:(NSString*)数据秒:(NSString*)key
{
size_t 输出长度;
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
字节 byte[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}; //这是无效的。主要 iv 是秘密的
NSData *datakey = [NSData dataWithBytes:key.UTF8String length:key.length];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
CCCryptorStatus 结果 = CCCrypt( kCCEncrypt
, kCC算法AES128
, kCCOptionPKCS7填充
, datakey.bytes
, [数据密钥长度]
, 字节
, datadata.bytes
, [数据数据长度]
, cipherData.mutableBytes
, cipherData.length
, &outLength);
if (result == kCCSuccess) {
cipherData.length = outLength;
}
else {
}
NSData *encryptedData=cipherData;
NSString *str=[encryptedData base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
return str;
}
问题是 cipherData
太短了。它需要是一个比 datadata
长的块,它可能(例如在这种情况下)比 data.length
.
长
使用 utf-8 编码从包含多字节数据(如阿拉伯语、表情符号等)的字符串创建数据时,数据将比字符串字符长。
错误代码:
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
正确代码:
NSData *datadata = [data dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData * cipherData = [NSMutableData dataWithLength: datadata.length + kCCBlockSizeAES128];
请注意,错误命名输入字符串 data
没有帮助,它是一个字符串。重命名 data
-> tex
然后 ``datadata->
data` 使代码更清晰。好的命名解决了很多代码问题。
我有一个加密函数,可以获取数据和密钥,内部 iv 和 returns 是一个加密字符串。我可以加密每个只包含英文字符但不包含阿拉伯字符的字符串。这是我的职能。请帮我找出问题所在。谢谢
-(NSString*)加密:(NSString*)数据秒:(NSString*)key
{
size_t 输出长度;
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
字节 byte[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}; //这是无效的。主要 iv 是秘密的
NSData *datakey = [NSData dataWithBytes:key.UTF8String length:key.length];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
CCCryptorStatus 结果 = CCCrypt( kCCEncrypt
, kCC算法AES128
, kCCOptionPKCS7填充
, datakey.bytes
, [数据密钥长度]
, 字节
, datadata.bytes
, [数据数据长度]
, cipherData.mutableBytes
, cipherData.length
, &outLength);
if (result == kCCSuccess) {
cipherData.length = outLength;
}
else {
}
NSData *encryptedData=cipherData;
NSString *str=[encryptedData base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
return str;
}
问题是 cipherData
太短了。它需要是一个比 datadata
长的块,它可能(例如在这种情况下)比 data.length
.
使用 utf-8 编码从包含多字节数据(如阿拉伯语、表情符号等)的字符串创建数据时,数据将比字符串字符长。
错误代码:
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
正确代码:
NSData *datadata = [data dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData * cipherData = [NSMutableData dataWithLength: datadata.length + kCCBlockSizeAES128];
请注意,错误命名输入字符串 data
没有帮助,它是一个字符串。重命名 data
-> tex
然后 ``datadata->
data` 使代码更清晰。好的命名解决了很多代码问题。