2011-12-29 41 views
8

Tôi đang tham gia một nhiệm vụ chuyển đổi mã Java để Objective C.Tương đương mục tiêu C của MessageDigest trong Java?

Đây là mã trong Java mà tôi phải chuyển đổi:

private String getHash(String input) 
{ 
    String ret = null; 
    try 
    { 
     MessageDigest md = MessageDigest.getInstance("SHA-256"); 

     byte[] bs = md.digest(input.getBytes("US-ASCII")); 


     StringBuffer sb = new StringBuffer(); 
     for (byte b : bs) 
     { 
      String bt = Integer.toHexString(b & 0xff); 
      if(bt.length()==1) 
      { 
       sb.append("0"); 
      } 
      sb.append(bt); 
     } 
     ret = sb.toString(); 
    } 
    catch (Exception e) 
    { 
    } 
    return ret; 
} 

Cụ thể, những gì tôi có thể sử dụng trong Objective C trong đó có các chức năng giống như MessageDigest class?

Trả lời

2

Tôi đã tìm thấy một khung công tác hỗ trợ SHA-256 trong stackoverflow.com. Thx stackoverflow :)

CommonCrypto/CommonDigest.h

và tôi nhận ra rằng tôi có thể sử dụng chức năng này:

CC_SHA256(const void *data, CC_LONG len, unsigned char *md) 

CC_SHA256_Final(unsigned char *md, CC_SHA256_CTX *c) 

CC_SHA256_Init(CC_SHA256_CTX *c) 

CC_SHA256_Update(CC_SHA256_CTX *c, const void *data, CC_LONG len) 

Vì vậy, tôi có thể tiếp tục công việc của tôi, ngoại trừ mã Java này.

byte[] bs = md.digest(input.getBytes("US-ASCII")); 

và tôi muốn biết rằng bất kỳ biểu thức C mục tiêu nào của mã tròn Java bên dưới?

for (byte b : bs) 

PS: Chuck, tôi thực sự đánh giá cao sự giúp đỡ của bạn. Cảm ơn bạn. :)

3

Một cái gì đó như thế này:

#import <CommonCrypto/CommonDigest.h> 

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

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0}; 
    CC_SHA256(keyData.bytes, keyData.length, digest); 
    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; 
    NSString *hash=[out description]; 
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; 
    return hash; 
} 
Các vấn đề liên quan