将sha1字符串解码为普通字符串
问题描述:
我正在使用下面的代码将字符串转换为sha1字符串,但我无法找到任何解决方案,即从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;
}
plz帮我解决了这个问题。
在此先感谢
答
SHA-1是一种单向散列算法,因此没有从SHA-1字符串转换为普通字符串的算法。
答
SHA1是单向散列:它不能被“解码”。
散列用于将值转换为另一个可能唯一的值。例如,您可以通过计算散列来指纹文件。然后,例如,您可以通过计算其哈希值并将其与希望的哈希值进行比较,从而知道您已成功下载了正确的千兆字节数据。
密码经常被散列:我可以检查您是否输入了正确的密码,而没有密码副本:当您设置密码并存储该密码时,我会散列密码。然后当你输入你的密码时,如果它的值相同,它就是正确的密码。
答
SHA1摘要是单向摘要,原始字符串不能从摘要中取回。
答
您无法对其解码。但是如果你太绝望了,蛮力吧!
+1 - 散列无法解码的原因是“可能唯一”位 - 如果结果散列的宇宙小于可能值的宇宙,散列必然是多对一的过程。多对一算法只能在“这*可能*是原始值”的可信度下反转, – 2010-08-16 10:41:51