将sha1字符串解码为普通字符串

时间:2010-08-16 10:29:16

标签: iphone

我正在使用以下代码将字符串转换为sha1字符串,但我无法找到任何解决此问题的方法,即来自sha1字符串的正常字符串。

+(NSString *)stringToSha1:(NSString *)str{
    const char *s = [str cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

    // This is the destination
    uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
    // This one function does an unkeyed SHA1 hash of your hash data
    CC_SHA1(keyData.bytes, keyData.length, digest);

    // Now convert to NSData structure to make it usable again
    NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    // description converts to hex but puts <> around it and spaces every 4 bytes
    NSString *hash = [out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];

    NSLog(@"Hash is %@ for string %@", hash, str);

    NSData *dtt = [hash dataUsingEncoding:NSUTF8StringEncoding];
    //dtt = [nsda]
    NSString *unhash = [dtt description];

    return hash;
}

请帮助我解决这个问题。

提前致谢

5 个答案:

答案 0 :(得分:8)

SHA1是单向散列:它无法“解码”。

哈希用于将值转换为另一个可能唯一的值。例如,您可以通过计算哈希值来指纹文件。然后,例如,您可以通过计算其哈希值并将其与您期望的哈希值进行比较来了解您已成功下载了正确的千兆字节数据。

密码经常被散列:我可以在没有密码副本的情况下检查您是否输入了正确的密码:我在设置密码时对密码进行散列并存储密码。然后,当您输入密码时,如果它的哈希值相同,则为正确的密码。

答案 1 :(得分:6)

SHA-1是一种单向散列算法,因此没有算法可以从SHA-1字符串转换为普通字符串。

答案 2 :(得分:1)

SHA1摘要是单向摘要,无法从摘要中检索原始字符串。

答案 3 :(得分:0)

你无法解码它。但如果你太绝望了,那就蛮力了!

答案 4 :(得分:0)

您还可以使用用于反转加密哈希函数的Rainbow表。