c# - IOS sha1错误输出

标签 c# ios

我试图在 IOS 中输出相同的 Sha1,但结果不一样。

由于这个答案SO应该没问题,结果是一样的

这是我的 C# 代码:

    using (SHA1 sha1Hash = SHA1.Create())
     {
            string hash1 = GetSHA1Hash(sha1Hash, "8390495498");
     }

    static string GetSHA1Hash(SHA1 sha1Hash, string input)
    { 
        byte[] data = sha1_Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }

结果是:d763bd0b5b346a3c95eb4f2912be40c2ce6f0a41

还有我的 Objective C 代码:

   [sh1obj sha1:@"8390495498"]
- (NSString *)sha1:(NSString *)str {
    NSData *data = [str dataUsingEncoding:NSUnicodeStringEncoding];

    NSString *unicodePassword = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];
    data = [unicodePassword dataUsingEncoding:NSUnicodeStringEncoding];
    data = [NSData dataWithBytes:[data bytes] + 2 length:[data length] - 2];

    unsigned char hash[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1([data bytes], [data length], hash);
    NSData *result = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];
    NSLog(@"Result: %@",result);

    return result;
}

结果是:<241cdda1 6867aaad cb69faed d0975579 f6ec3a07>

我什至也试过这个:

  [sh1obj sha1:@"8390495498"]
- (NSString *)sha1:(NSString *)str {

    const char *cStr = [str UTF8String];
    unsigned char result[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(cStr, strlen(cStr), result);
    NSString *s = [NSString  stringWithFormat:
                   @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                   result[0], result[1], result[2], result[3], result[4],
                   result[5], result[6], result[7],
                   result[8], result[9], result[10], result[11], result[12],
                   result[13], result[14], result[15],
                   result[16], result[17], result[18], result[19]
                   ];
    NSLog(@"Result: %@",s);
    return s;
}

结果是:cbdb5d7936ac9a56846cabad5e9d41942a08b49c

最佳答案

我认为 Objective-C 代码是正确的:

$ echo -n 8390495498 | openssl sha1  
cbdb5d7936ac9a56846cabad5e9d41942a08b49c

关于c# - IOS sha1错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26523194/

相关文章:

ios - 如何让我的角色 "ride"与移动平台一起移动?

ios - 在 iOS 中重启后尝试从本地路径加载图像失败

c# - 将元素添加到 ListView 时如何设置动画/过渡?

c# - 线程状态异常 : Thread has not been started when trying to join a thread

C#对象实例化

android - 在IOS7和Android中隐藏URL地址栏

html - 如何在 ios swift 中将本地 html 文件加载到字符串变量?

ios - 使用 AVAssetReaderVideoCompositionOutput 导出进行到一半,然后以 AVFoundationErrorDomain Code=-11800 退出

c# - volatile IEnlistmentNotification 和 TransactionScope.AsyncFlowEnabled = true

c# - 使用 CURL 发送到 Azure 函数的 Newtonsoft 反序列化 JSON 时出现异常