Meh*_*our 5 objective-c arabic ios
我有一个加密函数,它获取数据和密钥,带有内部 iv 并返回一个加密的字符串。我可以加密每个只包含英文字符但不包含阿拉伯语的字符串。这是我的职能。请帮我找出问题所在。谢谢
-(NSString*)Encrypt:(NSString*)data second:(NSString*)key
{
size_t outLength;
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
字节字节[] = {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
, kCCOptionPKCS7Padding
, 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;
}
Run Code Online (Sandbox Code Playgroud)
问题是cipherData太短了。它需要是一个比datadata可能(例如在本例中)长的块data.length。
当从包含多字节数据(例如阿拉伯语、表情符号等)的字符串创建使用 utf-8 编码的数据时,数据将比字符串字符长。
不正确的代码:
NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
Run Code Online (Sandbox Code Playgroud)
正确代码:
NSData *datadata = [data dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData * cipherData = [NSMutableData dataWithLength: datadata.length + kCCBlockSizeAES128];
Run Code Online (Sandbox Code Playgroud)
请注意,错误命名输入字符串data并没有帮助,它是一个字符串。重命名data->tex然后“datadata ->data”使代码更加清晰。良好的命名可以解决许多代码问题。
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |