gpt4 book ai didi

.net - SHA1哈希在Objective-C和C#.NET中产生不同的结果

转载 作者:行者123 更新时间:2023-12-01 18:23:06 30 4
gpt4 key购买 nike

基本上我想编写计算sha1哈希的函数。

到目前为止,我尝试过如下。

C#.NET

byte[] p2 = System.Text.Encoding.Unicode.GetBytes("password");
System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] result = sha.ComputeHash(p2);
string encodedPassword = Convert.ToBase64String(result);

输出:6Pl / upEE0epQR5SObftn + s2fW3M =

Objective-C

我从 NSData_Base64 Classes reference添加了Base64的类。
NSString *password = @"password";
NSData *data = [password dataUsingEncoding:NSUTF8StringEncoding];
NSString *unicodePassword = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];
data = [unicodePassword dataUsingEncoding:NSUnicodeStringEncoding];


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 base64EncodedString]);

输出:dYusXVhObIBzJMgg1E1FJ9cK1NY =

有人可以建议我做错了什么吗?

为什么这两个值不同?

请纠正我的错误。

最佳答案

这行是错误的,因为您将UTF8编码的数据解释为好像是Unicode编码的:
NSString *unicodePassword = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];

将第二行替换为:NSData *data = [password dataUsingEncoding:NSUnicodeStringEncoding];
数据中的前2个字节是BOM(字节顺序标记)。

删除这两个字节data = [NSData dataWithBytes:[data bytes] + 2 length:[data length] - 2];
...然后对该数据进行散列,您将拥有与C#中相同的散列。

关于.net - SHA1哈希在Objective-C和C#.NET中产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059594/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com