2015-10-14 101 views
1

我生成使用功能的文件的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我使用的代碼轉換如下

問題

當我試圖比較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

您需要基本解碼-64編碼的字符串,類似於:

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

其中str是從數據庫讀取的字符串。

+0

謝謝:)它現在工作。另外,str是以字符串格式存儲數據的變量。我剛剛更新了問題並添加了整個代碼。再次感謝幫助。 –