【发布时间】:2015-10-14 07:01:42
【问题描述】:
我正在使用下面给出的函数生成文件的 SHA-256 密钥:
- (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 但是,我需要将密钥以字符串格式存储在数据库中。为了将 NSData 转换为 NSString,我使用下面给出的代码:
//converting sha256 to nsstring
NSString * str = [sha256 base64EncodedStringWithOptions:0];
那么
我正在尝试使用以下代码将 str 转换回 NSData:
//converting str back to nsdata
NSData* dataFrmString = [str dataUsingEncoding:NSUTF8StringEncoding];
问题
当我尝试比较 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;
}
【问题讨论】:
标签: ios objective-c nsstring nsdata