如何在将NSData转换为NSString之后将NSString转换回NSData?
问题描述:
我生成使用功能的文件的SHA-256键给出如下:如何在将NSData转换为NSString之后将NSString转换回NSData?
- (NSData *)doSha256:(NSData *)dataIn {
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
CC_SHA256(dataIn.bytes, dataIn.length, macOut.mutableBytes);
return macOut;
}
此功能产生SHA-256密钥,但是返回NSData的,我需要存储在字符串格式的数据库中的密钥。
//converting sha256 to nsstring
NSString * str = [sha256 base64EncodedStringWithOptions:0];
然后
我想使用此代码到STR转换回NSData的:
//converting str back to nsdata
NSData* dataFrmString = [str dataUsingEncoding:NSUTF8StringEncoding];
为了NSData的到的NSString我使用的代码转换如下
问题
当我试图比较dataFrmString和SHA256的话说,双方的NSData不相同
//matching if the dataFrmString is equal to the sha256 data
if([dataFrmString isEqualTo:sha256])
{
NSLog(@"sucessully back to nsdata");
}
这里是整个代码
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
// source file : whose sha 256 will be generated
NSString* sourceFile = @"/Users/Paxcel/Downloads/Movies/World4uFRee.cc_dsam7dds.mkv";
//getting nsdata of the file
NSData *data = [[NSFileManager defaultManager] contentsAtPath:sourceFile];
//getting sha 256 of the file
NSData *sha256 = [self doSha256:data];
//converting sha256 to nsstring
NSString * str = [sha256 base64EncodedStringWithOptions:0];
//converting str back to nsdat
NSData* dataFrmString = [[NSData alloc] initWithBase64EncodedString:str
options:0];
//matching if the dataFrmString is equal to the sha256 data
if([dataFrmString isEqualTo:sha256])
{
NSLog(@"sucessully back to nsdata");
}
NSString* destinationFile = @"/Users/Paxcel/Desktop/appcast2.xml";
[sha256 writeToFile:destinationFile atomically:YES];
}
- (NSData *)doSha256:(NSData *)dataIn {
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
CC_SHA256(dataIn.bytes, dataIn.length, macOut.mutableBytes);
return macOut;
}
答
您需要基本解码-64编码的字符串,类似于:
NSData *data = [[NSData alloc] initWithBase64EncodedString:str
options:0];
其中str
是从数据库读取的字符串。
谢谢:)它现在工作。另外,str是以字符串格式存储数据的变量。我刚刚更新了问题并添加了整个代码。再次感谢帮助。 –