Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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
为什么我';我在C#和Python中得到了不同的结果_Python_C#_Cryptography - Fatal编程技术网

为什么我';我在C#和Python中得到了不同的结果

为什么我';我在C#和Python中得到了不同的结果,python,c#,cryptography,Python,C#,Cryptography,我正在努力用一个特定的键将一个字符串编码为SHA-256。 有一个python代码用作参考。 问题是我无法在C#中获得相同的结果 C# 有什么不对劲吗 谢谢当你说“不能得到同样的结果”时,到底有什么不同?您是否尝试过跟踪每个程序以查看结果的分歧?你知道哪一个是正确的吗?@KarlKnechtel pyton是正确的,pyton输出76687ffe5c516c793faa46fafba094e7ca7a6d735966e0e0c0b65eaa43bdca0,而C#4417784269b2d590b

我正在努力用一个特定的键将一个字符串编码为SHA-256。 有一个python代码用作参考。 问题是我无法在C#中获得相同的结果

C#

有什么不对劲吗


谢谢

当你说“不能得到同样的结果”时,到底有什么不同?您是否尝试过跟踪每个程序以查看结果的分歧?你知道哪一个是正确的吗?@KarlKnechtel pyton是正确的,pyton输出76687ffe5c516c793faa46fafba094e7ca7a6d735966e0e0c0b65eaa43bdca0,而C#4417784269b2d590b509d47829e8e8f70a05ee4e0d8ce3949286a6886b289b1fokay,所以下一件事是检查是否解码,
keyBytes
等。获取Python程序对应的正确值。在
HmacSha256Digest()
中,替换行
var keyBytes=Encoding.UTF8.GetBytes(secret)带有
var keyBytes=Convert.FromBase64String(secret)
调用
HmacSha256Digest()
时,只需将Base64编码键(
JcyV…uoc=
)作为第二个参数传递(调用
var decodedKey=Base64Decode(key);
和方法
Base64Decode(key)
不需要)。@Topaco谢谢!成功了!我怎样才能把你的回答标记为答案?
import base64
import hmac
import hashlib

# Base64 encoded key (get it with /hook/{hookId}/key request)
webhook_key_base64 = 'JcyVhjHCvHQwufz+IHXolyqHgEc5MoayBfParl6Guoc='

# notification parameters
data = '643|1|IN|+79165238345|13353941550'

webhook_key = base64.b64decode(s))
print(hmac.new(webhook_key, data.encode('utf-8'), hashlib.sha256).hexdigest())
public class Program
{
    public static void Main()
    {
        var key = "JcyVhjHCvHQwufz+IHXolyqHgEc5MoayBfParl6Guoc=";
        var message = "643|1|IN|+79165238345|13353941550";

        var decodedKey = Base64Decode(key);
        var result = HmacSha256Digest(message, decodedKey);

        Console.WriteLine(result);
        Console.ReadLine();
    }

    private static string HmacSha256Digest(string message, string secret)
    {
        var keyBytes = Encoding.UTF8.GetBytes(secret);
        var messageBytes = Encoding.UTF8.GetBytes(message);

        var cryptographer = new HMACSHA256(keyBytes);
        var bytes = cryptographer.ComputeHash(messageBytes);
        return BitConverter.ToString(bytes).Replace("-", "").ToLower();
    }

    private static string Base64Decode(string base64EncodedData)
    {
        var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
        return Encoding.UTF8.GetString(base64EncodedBytes);
    }
}