在obj中将NSData加密到NSString
我有一个iPhone应用程序,它使用CCCrypt(AES256)和明文密钥加密输入的NSString。 字符串和键被赋予加密方法,该方法返回一个NSData对象。
请求[数据描述]其中'data'是加密的字符串数据给出一个NSString类似于:“<0b368353 a707e7de 3eee5992 ee69827e e3603dc2 b0dbbc0b 861ca87d f39ce72a>”但是当我尝试将其转换为NSString时,我得到“(null)”。
我需要返回一个NSString给用户,它可以用来使用相同的明文密钥解密回原始字符串。 如果NSData对象的'description'属性可以返回一个字符串,是否有任何方法可以从NSData对象生成一个NSString而不会得到“(null)”?
更新:感谢奎因,谁建议使用Base64编码产生混乱的字符串。 据我所知,Base64编码不会简单地交换字符,但字符交换取决于位置,所以这很好。
我唯一担心的是,我希望能够使用“密码”加密消息,并且需要在混淆的字符串需要解码时输入相同的密码短语 - 任何人都可以提出实现此方法的方法吗?
首先, 不要使用-[NSData description]
为此目的创建NSString。 (最好把-description
当作调试输出,如果我之前的回答误导了你,我只是在打印描述来证明NSData可以被加密和解密)。相反,使用NSString的-dataUsingEncoding:
和-dataUsingEncoding:
-initWithData:encoding:
在NSData和NSString之间转换的方法。 即使有这些,请注意,AES加密的数据可能不会很好地转换为字符串,因为某些字节序列不会很好地播放,所以在创建字符串之前对数据进行编码是一个好主意。
我建议你尝试使用Base64编码NSData,因为Base64数据总是可以表示为ASCII字符串。 (当然,当你这样做时,你必须在解密之前从Base64解码。)
这里有一些有用的资源......
编辑:我假设你将这个与我对上一个关于NSString对象的AES加密问题的回答结合起来。 将数据编码为Base64不会对数据本身造成任何限制 - 它当然可以是AES-Enrypted数据本身。 如果你只是想要字符串输入和输出,那么该怎么做:
这实际上只是将两部分链接在一起,并在出路中反向执行它们。 从我之前的回答可以修改encryptString:withKey:
执行最后一步并返回一个字符串,并将decryptData:withKey:
更改为decryptString:withKey:
并接受两个字符串。 这非常简单。
我已经为NSData和NSString组合了一整套类别,为字符串提供AES256加密。
有关更多详细信息,请参阅关于“原始”问题的答案。
链接地址: http://www.djcxy.com/p/68327.html上一篇: Encrypted NSData to NSString in obj
下一篇: Javascript generic clone() method used in GWT application