ios - 如何在将 NSData 转换为 NSString 后将 NSString 转换回 NSData?

标签 ios objective-c nsstring nsdata

我正在使用下面给出的函数生成文件的 SHA-256 key :

- (NSData *)doSha256:(NSData *)dataIn {
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];

    CC_SHA256( dataIn.bytes, dataIn.length, macOut.mutableBytes);

    return macOut;
}

此函数正在生成 SHA-256 key 并返回 NSData 但是,我需要将 key 以字符串格式存储在数据库中。为了将 NSData 转换为 NSString,我使用下面给出的代码:

//converting sha256 to nsstring
    NSString * str = [sha256 base64EncodedStringWithOptions:0];

然后

我正在尝试使用以下代码将 str 转换回 NSData:

//converting str back to nsdata
    NSData* dataFrmString = [str dataUsingEncoding:NSUTF8StringEncoding];

问题

当我尝试比较 dataFrmStringsha256 时,它说这两个 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;
}

最佳答案

你需要解码 base-64 编码的字符串,像这样:

NSData *data = [[NSData alloc] initWithBase64EncodedString:str
                                                   options:0];

其中str是从数据库中读取的字符串。

关于ios - 如何在将 NSData 转换为 NSString 后将 NSString 转换回 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118664/

相关文章:

ios - stringByReplacingOccurrencesOfString没有给我想要的结果

php - 如何修复 2 个 Web 客户端之间的字符串长度编码?

ios - 通过 ObjCMongoDB 运行基于 MongoDB 字典的命令

ios - 在 iOS 6.1 中工作的 UIPickerView 现在在 Xcode 5 中崩溃

ios - 如何从本周的工作日名称获取具体日期

iphone - 我可以更改我在设备上的位置以测试用户的位置吗?

ios - 用户在 iOS9 上选择 "Allow"后注册本地通知返回 UIUserNotificationTypeNone

ios - 以不同方式突出显示 TextField 中的某些文本

objective-c - 在 XCode Profiler 中注册用于符号化的应用程序

ios - 页面上有一个或多个错误