将 NSData 转换为 NSString 后如何将 NSString 转换回 NSData?

Posted

技术标签:

【中文标题】将 NSData 转换为 NSString 后如何将 NSString 转换回 NSData?【英文标题】:How to convert NSString back to NSData after converting NSData to NSString? 【发布时间】: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];

问题

当我尝试比较 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;

【问题讨论】:

【参考方案1】:

您需要解码 base-64 编码的字符串,例如:

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

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

【讨论】:

谢谢 :) 它现在可以工作了。此外, str 是以字符串格式存储数据的变量。我刚刚更新了问题并添加了整个代码。再次感谢您的帮助。

以上是关于将 NSData 转换为 NSString 后如何将 NSString 转换回 NSData?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将 NSData 转换为 NSString? [复制]

如何将设备令牌(NSData)转换为NSString?

如何将 NSString 转换为 NSData?并且数据与字符串内容相同

将 UTF-8 编码的 NSData 转换为 NSString

将UTF-8编码的NSData转换为NSString

将 NSData 转换为 NSString 并再次转换为 NSData?