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

use*_*934 0 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;
}
Run Code Online (Sandbox Code Playgroud)

PLZ帮我解决了这个问题.

提前致谢

Ned*_*der 8

SHA1是单向散列:它不能被"解码".

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

密码经常被散列:我可以检查您是否输入了正确的密码而没有密码的副本:我在设置密码时对密码进行哈希处理并存储密码.然后当您输入密码时,如果它的哈希值相同,那么它就是正确的密码.


Dom*_*ger 6

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