2011-03-01 2 views
1

내 변환 코드는 모두 가지고 있지만 문자열을 sha-1을 16 진수 형식으로 변환합니다. sha-1을 base64로 변환하려면 어떻게해야합니까?iphone SDK : 문자열을 SHA-1 및 SHA-1을 Base64로 변환하려면 어떻게해야합니까? (WSSecurity 용)

-(NSString *)digest:(NSString*)input 

    int i; 

    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; 
    NSData *data = [NSData dataWithBytes:cstr length:input.length]; 

    uint8_t digest[CC_SHA1_DIGEST_LENGTH]; 

    CC_SHA1(data.bytes, data.length, digest); 

    output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; 
                length:CC_SHA1_DIGEST_LENGTH]; 

    for(i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) 
    { 
     [output appendFormat:@"%02x", digest[i]]; 
    } 
    return output; 
} 

답변

1

iOS에는 해시 또는 Base64가 내장되어 있지 않습니다. 당신은 자신의 롤백해야합니다. Google에서 SHA1의 C 구현을 찾으십시오. Base64의 경우, 당신을 위해 하나를 가지고 있습니다 :

NSString *ToBase64(NSData *d) 
{ 
    static const char ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
    static const NSString *PAD1 = @"=", *PAD2 = @"=="; 

    int l = [d length]; 
    unsigned char *p = (unsigned char*)[d bytes]; 
    unichar Chunk[4]; 
    NSMutableString *s = [NSMutableString stringWithCapacity:(l+3)*4/3]; 
    int i; 
    int mod = l % 3; 
    int ll = l - mod; 
    unsigned int triad; 
    NSString *sChunk; 
    for(i=0;i<ll;i+=3) 
    { 
     triad = (p[i]<<16) | (p[i+1]<<8) | p[i+2]; 
     Chunk[0] = ALPHABET[(triad >> 18) & 0x3f]; 
     Chunk[1] = ALPHABET[(triad >> 12) & 0x3f]; 
     Chunk[2] = ALPHABET[(triad >> 6) & 0x3f]; 
     Chunk[3] = ALPHABET[triad & 0x3f]; 
     sChunk = [[NSString alloc] initWithCharacters:Chunk length:4]; 
     [s appendString:sChunk]; 
     [sChunk release]; 
    } 
    if(mod == 1) 
    { 
     Chunk[0] = ALPHABET[(p[i] >> 2) & 0x3f]; 
     Chunk[1] = ALPHABET[(p[i] << 4) & 0x3f]; 
     sChunk = [[NSString alloc] initWithCharacters:Chunk length:2]; 
     [s appendString:sChunk]; 
     [sChunk release]; 
     [s appendString: PAD2]; 
    } 
    if(mod == 2) 
    { 
     triad = (p[i]<<8) | p[i+1]; 
     Chunk[0] = ALPHABET[(triad >> 10) & 0x3f]; 
     Chunk[1] = ALPHABET[(triad >> 4) & 0x3f]; 
     Chunk[2] = ALPHABET[(triad << 2) & 0x3f]; 
     sChunk = [[NSString alloc] initWithCharacters:Chunk length:3]; 
     [s appendString:sChunk]; 
     [sChunk release]; 
     [s appendString: PAD1];  
    } 
    return s; 
} 
+0

그래, 맞아. C 구현 도움이 될 수 있습니다 .. 대답 주셔서 감사합니다 – Relower

+0

commonCrypto 라이브러리는 이제 iOS 사용자가 사용할 수 있습니다. MD5 및 SHA1 표준을 포함하여 다양한 해싱 메서드 및 인코딩을 제공합니다. – Ash

관련 문제