Boz*_*Boz 15 iphone encryption objective-c nsstring nsdata
我有一个iPhone应用程序,使用CCCrypt(AES256)和明文密钥加密输入的NSString.字符串和密钥被赋予返回NSData对象的加密方法.
请求[数据描述]其中'数据'是加密的字符串数据给出一个NSString,如:"<0b368353 a707e7de 3eee5992 ee69827e e3603dc2 b0dbbc0b 861ca87d f39ce72a>"但当我尝试将其转换为NSString时,我得到"(null)".
我需要向用户返回一个NSString,它可以用于使用相同的明文密钥解密回原始字符串.如果NSData对象的'description'属性可以返回一个字符串,有什么办法可以从NSData对象生成一个NSString而不得"(null)"?
更新:感谢Quinn,他建议使用Base64编码来生成混乱的字符串.据我所知,Base64编码不只是交换字符,但字符交换取决于位置,所以没关系.
我唯一担心的是我希望能够使用'密码短语'加密消息,并且当需要解码混乱的字符串时需要输入相同的密码短语 - 任何人都可以建议实现此方法吗?
Qui*_*lor 33
首先,不要用于-[NSData description]
为此目的创建NSString.(最好将其-description
视为调试输出.如果我之前的回答误导你,我很抱歉,我只是打印描述来证明NSData可以加密和解密.)而是使用NSString -dataUsingEncoding:
和-initWithData:encoding:
方法在NSData和NSString之间进行转换.即使有这些,请注意AES加密的数据可能不会很好地转换为字符串 - 某些字节序列不能很好地播放,因此在创建字符串之前对数据进行编码是个好主意.
我建议你尝试使用Base64编码 NSData,因为Base64数据总是可以表示为ASCII字符串.(当然,当你这样做时,你必须在解密前从Base64解码.)
这是一些有用的资源......
编辑:我假设你将这与我之前关于NSString对象的AES加密的问题的答案结合起来.将数据编码为Base64不会对数据本身施加任何限制 - 它当然可以是AES加密的数据本身.如果你只想要字符串输入和输出,这是怎么做的:
这只是将两个部分链接在一起并在出路时反向执行的问题.从我之前的回答中,您可以修改encryptString:withKey:
以执行最后一步并返回一个字符串,然后更改decryptData:withKey:
为decryptString:withKey:
并接受两个字符串.这很简单.