2010-08-16 6 views
1

문자열을 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이 문제를 해결하는 데 도움을줍니다. 사전

답변

6

SHA-1은 단방향 해시 알고리즘이므로 SHA-1 문자열에서 일반 문자열로 이동하는 알고리즘은 없습니다.

8

SHA1에서

덕분에 단방향 해시입니다 : 그것은 "디코딩"할 수 없습니다.

해싱은 값을 다른 고유 값으로 변환하는 데 사용됩니다. 예를 들어 해시를 계산하여 파일을 지문 채취 할 수 있습니다. 그런 다음 예를 들어 해시를 계산하고 예상 해시와 비교하여 올바른 기가 바이트의 데이터를 성공적으로 다운로드했음을 알 수 있습니다.

비밀번호가 자주 해시됩니다. 비밀번호를 입력하지 않고 올바른 비밀번호를 입력했는지 확인할 수 있습니다. 비밀번호를 설정할 때 비밀번호를 해시하고 저장합니다. 그런 다음 암호를 입력하면 동일한 값으로 해시되면 올바른 암호입니다.

+0

+1 - 이유 해시를 디코딩 할 수없는 이유는 "고유 한"비트 해싱은 결과 해시가 가능한 값의 범위보다 작은 경우 반드시 다 대일 프로세스입니다. 다 대일 알고리즘은 "this * might *가 원래의 값일 수 있습니다"라는 신뢰 수준으로 만 역전 될 수 있습니다. –

1

SHA1 다이제스트는 일방적 다이제스트이며 ​​원래 문자열은 다이제스트에서 다시 검색 할 수 없습니다.

0

디코딩 할 수 없습니다. 그러나 당신이 너무 필사적이라면, Brute-force it!

관련 문제