SHA1 hash producing different result in Objective-C and C#.NET

前端 未结 2 1182
醉梦人生
醉梦人生 2021-02-11 07:56

Basically I want to write function that computes sha1 hash.

So far I have tried is as follows.

C#.NET

byte[] p2 = System.Text.En         


        
2条回答
  •  [愿得一人]
    2021-02-11 09:01

    For further information I found that SHA1 function can have some results..

    So I have implemented methods at this link: MD5 and SHA1 iOS implementation linked by this stackoverflow question

    and I refine it with my integration that send as parameters if you send UTF8-encoding string or not (unicode one) and if you want hexadecimal string or decimal one

    - (NSString*) sha1UTF8Encoding:(BOOL)utf8 andDecimal:(BOOL)decimal
    {
        const char *cstr;
        if (utf8) {
            cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
        }else{
            cstr = [self cStringUsingEncoding:NSUnicodeStringEncoding];
        }
        NSData *data = [NSData dataWithBytes:cstr length:self.length];
    
        uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    
        CC_SHA1(data.bytes, data.length, digest);
    
        NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
        for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++){
            if (decimal) {
                [output appendFormat:@"%i", digest[i]];
            }else{
                [output appendFormat:@"%02x", digest[i]];
            }
        }
    
        return output;    
    }
    

    (Note that I implemented this method in a NSString Category)

    With this I tested that you can use it for many purpose sha1 operation, for example with this configuration:

    NSString* sha1 = [stringToTest sha1UTF8Encoding:YES andDecimal:YES];
    

    sha1 variable match with the one product by the C# method found at this link: Hashing using the SHA1 class

提交回复
热议问题