ios - 阿拉伯字符的AES加密-Objective C

标签 ios objective-c arabic

我有一个加密函数,它获取数据和 key ,带有内部 iv 并返回一个加密的字符串。我可以加密每个只包含英文字符但不包含阿拉伯字符的字符串。这是我的职能。请帮我找出问题所在。谢谢

-(NSString*)Encrypt:(NSString*)data second:(NSString*)key
    {
        size_t outLength;
        NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
        Byte byte[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}; //It`s not valid. The main iv is secret
        NSData *datakey = [NSData dataWithBytes:key.UTF8String length:key.length];
        NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];
        CCCryptorStatus result = CCCrypt( kCCEncrypt
                                        , kCCAlgorithmAES128
                                        , kCCOptionPKCS7Padding
                                        , datakey.bytes
                                        , [datakey length]
                                        , byte
                                        , datadata.bytes
                                        , [datadata length]
                                        , cipherData.mutableBytes
                                        , cipherData.length
                                        , &outLength);

if (result == kCCSuccess) { cipherData.length = outLength; } else { } NSData *encryptedData=cipherData; NSString *str=[encryptedData base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength]; return str; }

最佳答案

问题是 cipherData 太短了。它需要比 datadata 长一个 block ,而 datadata 可能(例如在本例中)比 data.length 长。

当使用 utf-8 编码从包含多字节数据(如阿拉伯语、表情符号等)的字符串创建数据时,数据将比字符串字符长。

错误的代码:

NSMutableData * cipherData = [NSMutableData dataWithLength:data.length + kCCBlockSizeAES128];
NSData *datadata = [NSData dataWithBytes:data.UTF8String length:data.length];


Correct code:

NSData *datadata = [data dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData * cipherData = [NSMutableData dataWithLength: datadata.length + kCCBlockSizeAES128];  


请注意,错误命名输入字符串 data 没有帮助,它是一个字符串。重命名 data -> tex 然后重命名 ``datadata->data` 使代码更清晰。好的命名可以解决很多代码问题。

关于ios - 阿拉伯字符的AES加密-Objective C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47266318/

相关文章:

ios - 如何创建跨越多个部分的粘性标题

ios - 如何从 TableView 单元格中的图像手势获取indexPath

ios - 如何从 Xamarin.iOS 中的 iOS 扩展调用 NSUserDefaults 观察者

objective-c - AVAudioplayer 或 delegate 过早分配的问题

ios - 将mapkit注释对象转换为mapbox注释对象

php - 删除阿拉伯变音符号

ios - 多个模态视图点击即可关闭

objective-c - 最佳实践 : How to update a repeating NSTimer interval after each call to the selector method

WordPress 和 RTL

javascript+动态删除阿拉伯语文本变音符号