【问题标题】:How to convert NSData to NSString and revert the NSString to NSData?如何将 NSData 转换为 NSString 并将 NSString 还原为 NSData?
【发布时间】:2015-09-30 07:14:48
【问题描述】:

我的任务是加密文件(.png、.txt、任何..)

为了实现它,我正在做的是

加密:

  1. 读取文件并将其存储到 NSData。
  2. 将 NSData 转换为 NSString。
  3. 在 AESCrypt 的帮助下加密 NSString
  4. 将 NSString 存储在文件中

解密

  1. 读取加密字符串
  2. 在 AESCrypt 的帮助下解密
  3. 将其转换回 NSData
  4. 将其保存回某个位置

下面是我为了将文件转换为 NSString 所做的代码:

NSString* sourceFile = @"/Users/Vikas/Desktop/theHulk.png";

NSData *data = [[NSFileManager defaultManager] contentsAtPat
h:sourceFile];

NSString *dataAsString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

问题:

上面的代码能够读取文件并将其存储到 NSData 但是当我将 NSData 转换为 NSString 时,我得到的值是 nil

研究

StackOver Flow 1

StackOver Flow 2

S.P:如果您对文件加密有更好的建议,请告诉我,因为我是新手。

【问题讨论】:

  • 你能加密数据而不转换成字符串吗?通常,加密适用于字节,而不仅仅是字符串
  • 实际上,我使用的库(AESCrypt)能够加密字符串,所以我想如果我想加密一个文件,那么我需要将它转换为 NSString。如果你能告诉我如何加密/解密 NSData @CarlVeazey,那就太好了
  • 那么不要使用那个库。直接使用普通加密或它的差异抽象
  • stackoverflow.com/questions/2579453/… 从搜索 encrypt nsdata 中得知,相信您可以进行类似搜索以了解更多信息;)
  • 并非所有数据都可以转换为任何特定的字符串编码,尤其是 UTF-8。出于某种原因,如果需要字符串表示,一般的解决方案是使用 Base64 或十六进制编码。

标签: objective-c cocoa


【解决方案1】:

根据this blog,字符串到数据的转换会强制使用尾随\0 字节,您可能必须将其删除。这可以按如下方式完成:

data = [data subdataWithRange:NSMakeRange(0, [data length] - 1)];

试试看是否适合你。

【讨论】:

  • 谢谢你的回答。我现在直接加密 NSData 而不是先将其转换为 NSString 。但是,我已经尝试过您的方法,但它仍然无法正常工作,并且 NSData 仍然没有转换为 NSString。发生了什么:我将图像的 NSData 放入名为“data”的 NSData 变量中,然后我使用了您的代码行,然后尝试将其转换为 NSString 但是,它不起作用,并且 NSString 仍然为零。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多