2015-09-30 178 views
1

我的任务是对文件进行加密(巴纽,txt文件,任何..)如何将NSData转换为NSString并将NSString恢复为NSData?

为了实现它,我做的事情是

加密:

  1. 阅读文件并将其存储到NSData中。
  2. 将NSData转换为NSString。
  3. 加密的NSString与帮助AESCrypt
  4. Store中的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时,我得到的值是

研究

StackOver Flow 1

StackOver Flow 2

S.P:如果您对文件加密更好的建议,那么请让我知道,因为我新手

+1

你可以在不转换为字符串的情况下加密数据吗?一般来说,加密在字节上起作用,而不仅仅是字符串。 –

+0

实际上,我使用的库(AESCrypt)能够加密字符串,所以我想如果我想加密一个文件,那么我需要将它转换为NSString。如果你能给我一个关于如何解密NSData @CarlVeazey –

+2

那么不要使用那个库。直接使用常见密码或使用常见密码 –

回答

0

根据this blog,字符串到数据转换强制尾随\0字节,您可能必须删除该字节。这是可以做到如下:

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

尝试看是否适合你。

+0

谢谢你的回答。我现在直接加密NSData,而不是先将它转换为NSString。但是,我已经试过你的方式,它仍然无法正常工作,仍然NSData没有转换为NSString。发生了什么:我得到一个图像的NSData到一个名为“data”的NSData变量,然后我使用了你的代码行,然后我试图将它转换为NSString,但它不起作用,NSString仍然为零。 –