在 C# 中无法获得与 Python 中相同的哈希值

2024-03-18

我有一个字符串,需要对其进行哈希处理才能访问 API。 API 创建者在 Python 中提供了一个 codenippet,它对代码进行哈希处理,如下所示:

hashed_string = hashlib.sha1(string_to_hash).hexdigest()

当使用这个散列字符串访问 API 时,一切都很好。我尝试在 C# 中获得相同的哈希字符串结果,但没有成功。我尝试了很多方法,但到目前为止没有任何效果。我也知道十六进制消化部分,并且在尝试模仿该行为时我牢记这一点。

有谁知道如何在 C# 中得到相同的结果?

EDIT:这是我尝试在 C# 中重现相同结果的多种方法之一:

public string Hash(string input)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
        var sb = new StringBuilder(hash.Length * 2);

        foreach (byte b in hash)
        {
            sb.Append(b.ToString("X2"));
        }

        return sb.ToString().ToLower();
    }
}

这段代码取自:在 C# 中使用 SHA1 算法进行哈希处理 https://stackoverflow.com/questions/17292366/hashing-with-sha1-algorithm-in-c-sharp

其他方式

public string ToHexString(string myString)
{
    HMACSHA1 hmSha1 = new HMACSHA1();
    Byte[] hashMe = new ASCIIEncoding().GetBytes(myString);
    Byte[] hmBytes = hmSha1.ComputeHash(hashMe);
    StringBuilder hex = new StringBuilder(hmBytes.Length * 2);
    foreach (byte b in hmBytes)
    {
        hex.AppendFormat("{0:x2}", b);
    }
    return hex.ToString();
}

这段代码取自:Python hmac 和 C# hmac https://stackoverflow.com/questions/11790599/python-hmac-and-c-sharp-hmac

EDIT 2

一些输入/输出:

C#(使用上面描述中提供的第二种方法)

input: callerId1495610997apiKey3*_&E#N@B1)O)-1Y

output:1ecded2b66e152f0965adb96727d96b8f5db588a

Python

input: callerId1495610997apiKey3*_&E#N@B1)O)-1Y

output:bf11a12bbac84737a39152048e299fa54710d24e

C#(使用上面描述中提供的第一种方法)

input:callerId1495611935​apiKey{[B{+%P)s;WD5&5x

output: 7e81e0d40ff83faf1173394930443654a2b39cb3

Python

input:callerId1495611935​apiKey{[B{+%P)s;WD5&5x

output: 512158bbdbc78b1f25f67e963fefdc8b6cbcd741


C#:

public static string Hash(string input)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
        var sb = new StringBuilder(hash.Length * 2);

        foreach (byte b in hash)
        {
            sb.Append(b.ToString("x2")); // x2 is lowercase
        }

        return sb.ToString().ToLower();
    }
}

public static void Main()
{
    var x  ="callerId1495611935​apiKey{[B{+%P)s;WD5&5x";
    Console.WriteLine(Hash(x)); // prints 7e81e0d40ff83faf1173394930443654a2b39cb3
}

Python

import hashlib
s = u'callerId1495611935​apiKey{[B{+%P)s;WD5&5x'
enc = s.encode('utf-8') # encode in utf8
hash = hashlib.sha1(enc)
formatted = h.hexdigest()
print(formatted) # prints 7e81e0d40ff83faf1173394930443654a2b39cb3

您的主要问题是您在 C# 和 Python 中对同一字符串使用不同的编码。两种语言均使用 UTF8 并使用相同的大小写。输出是相同的。

Note在你的输入字符串中(之间callerId1495611935 and apiKey{[B{+%P)s;WD5&5x) 有一个hidden \u200b特点 http://www.fileformat.info/info/unicode/char/200B/index.htm。这就是为什么使用 UTF-8 编码字符串会得到与使用 ASCII 编码不同的结果。该字符必须在您的字符串内吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中无法获得与 Python 中相同的哈希值 的相关文章

  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 如何将 Q 格式整数转换为浮点数(反之亦然)?

    我四处搜寻 找不到一个很好的问题来回答这个问题 给定一个整数 使用Q Format https en wikipedia org wiki Q number format 如何将该数字转换为普通浮点类型 反之亦然 如何将浮点类型转换为Q F
  • Python:使用for循环更改变量后缀

    我知道这个问题被问了很多 但到目前为止我无法使用 理解答案 我想改变for循环中变量的后缀 我尝试了 stackoverflow 搜索提供的所有答案 但很难理解提问者经常提出的具体代码 因此 为了清楚起见 我使用一个简单的示例 这并不意味着
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • Python 可以替代 Java 小程序吗?

    除了制作用于物理模拟 如抛射运动 重力等 的教育性 Java 小程序之外 还有其他选择吗 如果你想让它在浏览器中运行 你可以使用PyJamas http pyjs org 这是一个 Python 到 Javascript 的编译器和工具集
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • Django 迁移错误 'TypeError: 序列项 1: 需要一个类似字节的对象,在 mysql-connector-pythoncursor_cent.py 文件上找到 str'

    我正在 Django 项目中使用 mysql connector 来处理 mysql 请求 问题是我正在使用 django admin startproject project 设置一个简单的项目 当我尝试进行简单的管理 py 迁移时 这是
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 使用Python的线程模块调用ctypes函数比使用多处理更快?

    我一生都无法找出这个问题的答案 我编写了一个可以执行数百次繁重计算的脚本 我有一个绝妙的主意 将这些计算任务编写为 C 然后使用 Python 的 ctypes 与它们交互 我心想 我什至可以使用并行性进一步优化它 我最初的方法是使用线程
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 有没有办法跨模块使用局部变量?

    我有一个带有模块和用户窗体的 VBA 项目 我想在我的用户表单中使用模块中的一些变量 我是否有必要在全局声明这些变量 我不喜欢全局变量 因为它们在代码执行后保留在内存中 并且我必须在宏开始时一一重置这些变量 我无法使用关键字 End 从内存
  • 电子邮件中的 Message-ID 有什么用?

    据我所知 每个消息 ID 都必须是唯一的 但是如果我们强制标头具有固定值 则可能会创建重复的消息 ID 所以我不明白他们说 Message ID 应该是唯一的有什么意义 但他们很容易创建重复项 如果任何有一点阅读和基本编程知识的人都可以轻松
  • 使用 Keras 加载之前保存的重新训练的 VGG16 模型时出现 ValueError

    我在 Keras 中使用 VGG16 架构 我通过以下方式对其进行了重新训练以满足我的需求 vgg16 model keras applications vgg16 VGG16 model Sequential for layer in v
  • CUDA:如何直接在GPU上使用thrust::sort_by_key? [复制]

    这个问题在这里已经有答案了 Thrust 库可用于对数据进行排序 该调用可能如下所示 带有键和值向量 thrust sort by key d keys begin d keys end d values begin 在 CPU 上调用 d
  • Azure DevOps 服务连接到 B2C 租户?

    我正在尝试建立从 Azure DevOps 到我的 Azure B2C 租户的服务连接 但遇到了问题 我开始认为这是不可能的 我与主 Azure 订阅 租户有多个服务连接 但特别想要与我的 B2C 租户建立连接 以便我可以使用 Terraf
  • 禁用复制构造函数

    我有一堂课 class SymbolIndexer protected SymbolIndexer public static inline SymbolIndexer GetUniqueInstance static SymbolInde
  • 如何从javascript中的回调函数中获取完整数据

    我编写了以下函数 它从 url 获取 json 数据 function getWeatherDataForCities cityArray var arrAllrecords var toDaysTimestamp Math round n
  • 将(可选)参数传递给 HTTP 参数(Python、请求)

    我目前正在开发 API 包装器 并且在将参数从函数传递到请求的有效负载中时遇到问题 参数可以是 blockId senderId recipientId limit offset orderBy 所有参数均通过 OR 连接 一个可能的解决方
  • 在 Rails 中使用 Turbolinks link_to

    只是想知道是否有一种方法可以直接在 Rails link to 帮助程序中使用 Turbolinks 快速的谷歌搜索没有发现任何值得注意的东西 这是我尝试过但无济于事的类型 我知道你可以通过像这样的常规链接来做到这一点 a href gir
  • 为什么使用 twitter bootstrap 的多模式会出现过多递归错误?

    我尝试在另一个模态中包含一个模态 但是 我收到了类似的错误too much recursion在火狐浏览器中 我使用了最新的 jQuery 和 Twitter bootstrap 但仍然有这个问题 这里是plunker http plnkr
  • Windows 服务托管 TCP WCF 服务

    我正在尝试在 Windows 2008 R2 服务器上托管 WCF 服务作为 Windows 服务 我按照 msdn 提供的指示进行操作 在这里找到 http msdn microsoft com en us library ff64981
  • 如何在不创建用户帐户的情况下只允许每人(电脑/手机)对网站上的 1 个帖子投 1 票?

    在学习 Meteor 框架的过程中 我正在将 Yik Yak 移动应用程序重新创建为 Web 应用程序 但该应用程序是完全匿名的 没有用户帐户 但您仍然只能对帖子投赞成票或反对票一次 如何使这项工作有效 您想要的可能不仅仅需要 JavaSc
  • 网格视图数据绑定事件

    如何使用网格视图的数据绑定事件以及如何调用它有人可以详细说明一下吗 我像这样在按钮上绑定 gridview DataTable dt placedStudentManager GetPlacedStudentList sb passoutY
  • set.pop() 是确定性的吗?

    我知道 python 集合的元素是没有顺序的 调用pop方法返回任意元素 我对此很满意 我想知道当集合具有相同的历史记录时 pop 是否总是返回相同的元素 当然 在一个版本的 python 中 我不介意 python 的不同版本 实现是否做
  • 在 Android 密钥库中存储 hmac 密钥

    我使用下面的代码创建 hmac 密钥并将其作为字符串返回 KeyGenerator keyGen null try keyGen KeyGenerator getInstance HmacSHA256 catch NoSuchAlgorit
  • 如何使用目标接口将编译选项添加到 CMake FetchContent 依赖项

    我有一个使用 CMake 的依赖项FetchContent需要使用一些构建标志来构建 cmake DFLAG ON 这个问题也被问到here https stackoverflow com questions 68708076 how to
  • 在 Elastic Beanstalk 上运行 .config 文件?

    我正在尝试在我的弹性豆茎上运行自定义 config 文件 我正在按照以下说明进行操作这个链接 http www tonmoygoswami com 2013 05 how to enable gzip on amazon elastic h
  • 在 C# 中使用 RSA

    如何在 C 中使用 RSA 加密技术加密文本或任何其他媒体 我需要使用任何外部库还是有任何内置的东西 一个小示例代码会有所帮助 Use 系统 安全 加密 RSACryptoServiceProvider http msdn microsof
  • OpenShift action_hooks 不可执行

    当我在 OpenShift 中创建测试 DIY 应用程序时 action hooks工作正常 但现在我创建了一个实际的应用程序 当我推送更改时它们不会触发 我做了一些调查 发现了问题 由于某种原因 操作挂钩无法执行 我检查过 它们在测试应用
  • 在 C# 中无法获得与 Python 中相同的哈希值

    我有一个字符串 需要对其进行哈希处理才能访问 API API 创建者在 Python 中提供了一个 codenippet 它对代码进行哈希处理 如下所示 hashed string hashlib sha1 string to hash h