Encryption 将NSString强制转换为NSData

Encryption 将NSString强制转换为NSData,encryption,casting,nsstring,nsdata,nsstringencoding,Encryption,Casting,Nsstring,Nsdata,Nsstringencoding,有没有办法将NSString存储在NSData中,以维护相同的数据? 示例(这很好,但不是我需要的): 我需要这样的东西(显然失败了): 简而言之:我需要使用NSData,就像它与NSString相同一样(就像使用cast操作符一样)。这种方法对于预加载加密的核心数据sqlite数据库(在NSString中)非常有用,并且仅当用户访问持久存储的字段时才进行解密。 要解密,我使用: NSData *decryptedData = [encryptedData AES256Decrypt

有没有办法将NSString存储在NSData中,以维护相同的数据?

示例(这很好,但不是我需要的):


我需要这样的东西(显然失败了):


简而言之:我需要使用NSData,就像它与NSString相同一样(就像使用cast操作符一样)。这种方法对于预加载加密的核心数据sqlite数据库(在NSString中)非常有用,并且仅当用户访问持久存储的字段时才进行解密。 要解密,我使用:

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString];
其中encryptedData是NSData,keyString是NSString

非常感谢大家

简短回答:不

NSData对象是1和0的原始序列的包装器。NSString对象是未公开编码中Unicode字符数组的包装器

根据用于写入NSData的字符串编码,它可以表示许多不同的字符串。例如:表示相同字符的小尾端UTF16和大尾端UTF16字符串看起来会不同,尝试将UTF-8字符串解析为UTF-16会让您胡言乱语

这就是为什么在将NSData作为字符串处理之前,始终必须将其转换为NSString的原因:因为在指定编码之前,它不是字符串;这只是原始的1和0

从你的问题中,我不确定你为什么要这样做,但是你可以用C字符串(而不是NSString)来完成你需要的,你可以用NSData的-bytes方法来完成。但是,如果您想在任何时候得到有用的字符串,您仍然需要记住编码

NSData nsdataString = @"Hello World!";
NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString];