在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解码。)

这里有一些有用的资源......

  • Colloquy有一些代码可以对NSData进行编码/解码(头文件和实现)
  • Google Toolbox for Mac具有类似的功能(标题和实现)
  • 关于该主题的可可爱博客文章。
  • 关于该主题的CocoaDev.com维基页面。

  • 编辑:我假设你将这个与我对上一个关于NSString对象的AES加密问题的回答结合起来。 将数据编码为Base64不会对数据本身造成任何限制 - 它当然可以是AES-Enrypted数据本身。 如果你只是想要字符串输入和输出,那么该怎么做:

  • 加密
  • 提供要加密的NSString,以及用于加密的密码。
  • 将字符串转换为NSData并对其执行AES加密(请参阅上一个问题)。
  • Base64编码NSData,然后创建并返回编码输出的NSString。
  • 解密
  • 提供加密和编码的字符串以及用于解密的密码。
  • 从第一个字符串创建一个NSData,然后Base64解码数据。
  • 对数据执行AES解密,然后创建并返回NSString。
  • 这实际上只是将两部分链接在一起,并在出路中反向执行它们。 从我之前的回答可以修改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