阿拉伯字符的 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` 使代码更清晰。好的命名解决了很多代码问题。