Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SHA1 Python到C#的转换_C#_Python_Cryptography_Sha1 - Fatal编程技术网

SHA1 Python到C#的转换

SHA1 Python到C#的转换,c#,python,cryptography,sha1,C#,Python,Cryptography,Sha1,我有下面一段python代码,我正试图将其转换为C。C#实现的结果不同于python。有人能解释一下这个代码在做什么吗? 关于转换成C#有什么建议吗 输入为:user@me.com Python代码: def encode_username(u): d = hashlib.sha1(u).digest() return base64.b32encode(d).lower() 结果:'2hg7ic5ttw4cgfo5kfnjhtqwbq73l6rl' 我的C#代码: 结果:“D1

我有下面一段python代码,我正试图将其转换为C。C#实现的结果不同于python。有人能解释一下这个代码在做什么吗? 关于转换成C#有什么建议吗

输入为:user@me.com

Python代码:

def encode_username(u):
    d = hashlib.sha1(u).digest()
    return base64.b32encode(d).lower()
结果:
'2hg7ic5ttw4cgfo5kfnjhtqwbq73l6rl'

我的C#代码:

结果:
“D1CDF40BB39DB82315DD515A93CE160C3FB5FA2B”


Base32参考:

避免使用
编码。默认值
(你能告诉它是什么吗?)并使用你知道另一部分(Python)正在使用的编码,例如
编码。UTF8


否则,我们可能需要查看您的
Base32.tobase32字符串的代码,以查看输入或输出是否不同。

避免使用
编码。默认值
(您能告诉它是什么吗?)并使用您知道另一部分(Python)正在使用的代码,例如
编码.UTF8


否则,我们可能需要查看
Base32.ToBase32String的代码,以查看输入或输出是否不同。

C# python C# python
您链接到atrevido.net的代码无法生成您描述的输出(
D1CD…
),因为该代码根本不使用字符
1
(请参见它的
ValidChars
常量,该常量使用非常非标准的base32字符映射,除此之外还缺少
1
0

事实上,您为C#提供的输出字符串只包含字符
0-9A-F
,这使我认为它是十六进制的。接着,
hashlib.sha1的python输出user@me.com“).hexdigest().upper()
实际上是您从C#收到的字符串<代码>D1CDF40BB39DB82315DD515A93CE160C3FB5FA2B

因此,问题在于,您在.Net下使用的任何代码都不会进行任何类型的base32编码,而是base16/hexidecimal。您需要在python下使用十六进制,或者在.Net下使用真正的base32实现


(另外,正如其他人所建议的,您应该使用
Encoding.UTF8.GetBytes
,否则您将在不同的计算机上获得不一致的行为)。

链接到atrevido.net的代码无法生成您描述的输出(
D1CD…
),因为该代码根本不使用字符
1
)(请参见它的
ValidChars
常量,它使用非常非标准的base32字符映射,并且除其他外,它缺少
1
0

事实上,您为C#提供的输出字符串只包含字符
0-9A-F
,这使我认为它是十六进制的user@me.com“).hexdigest().upper()
实际上是您从C#…
D1CDF40BB39DB82315DD515A93CE160C3FB5FA2B
收到的字符串

因此,问题在于,您在.Net下使用的任何代码都不是在进行任何类型的base32编码,而是base16/hexidecimal。您需要在python下使用hex,或者在.Net下使用真正的base32实现


(另外,正如其他人所建议的,您应该使用
编码.UTF8.GetBytes
,否则您将在不同的计算机上获得不一致的行为)。

Base32.ToBase32String
不是标准的,您能告诉我们该实现吗?它可能取决于两种语言之间获取字节的方式(即编码),或者字符串是如何构造的,当然还有其他一些。可能字符串编码中存在编码问题。默认值。GetBytes(用户名)返回电脑当前的ANSI编码,它可能返回的字节数与python编码的字节数不同。@失望先生从.NET库上的链接文章中更新了我的问题:“请注意,这不符合Base32标准编码,但使用它自己的一组字符…”
Base32。ToBase32String
不是标准的,您能告诉我们该实现吗?它可能取决于两种语言之间获取字节的方式(即编码),或者字符串是如何构造的,当然还有其他一些。可能字符串编码中存在编码问题。默认情况下。GetBytes(用户名)返回电脑当前的ANSI编码,它可能返回的字节与python编码的字节不同。@Dression先生从.NET库的链接文章中更新了我的问题:请注意,这不符合Base32标准编码,但使用它自己的一组字符。。。"这是我得到的:C#结果:D1CDF40BB39DB82315DD515A93CE160C3FB5FA2B Python结果:2hg7ic5ttw4cgfo5kfnjhtqwbq73l6rl文本是:user@me.com@Prashant-您是否尝试了编码:encoding.utf8这是我得到的结果:C#结果:D1CDF40BB39DB82315DD515A93CE160C3FB5FA2B Python结果:2hg7ic5ttw4cgfo5kfnjhtqwbq73l6rl文本是:user@me.com@Prashant-您是否尝试过编码:encoding.UTF8
    string EncodeUsername(string username)
    {
        var sh = SHA1.Create();
        var bytes = sh.ComputeHash(Encoding.Default.GetBytes(username));
        return Base32.ToBase32String(bytes);
    }
private static SHA1CryptoServiceProvider SHA = new SHA1CryptoServiceProvider();

private static string CalculateSHA1(string text, Encoding enc)
{
    byte[] buffer = enc.GetBytes(text);
    return BitConverter.ToString(SHA.ComputeHash(buffer)).Replace("-", "");
}
def encode_username(u):
return hashlib.sha1(u.encode('utf-8'));