问题标签 [hmacsha1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
698 浏览

ios - Objective-C 中 HMAC SHA1 实现的问题

我正在尝试使用 HMAC-SHA1 算法为休息请求创建 base64 签名。我专门使用 SinglePlatform API,步骤如下:

  1. 去掉请求的域部分,只留下路径和查询:/locations/haru-7?client=YOUR_CLIENT_ID
  2. 检索您的私钥,该私钥在 URL 的修改后的 Base64 中编码,并使用 HMAC-SHA1 算法对上述 URL 进行签名。您可能需要将签名密钥解码为其原始二进制格式。在许多密码库中,生成的签名将采用二进制格式。
  3. 使用修改后的 Base64 for URL 对生成的二进制签名进行编码,以将此签名转换为可以在 URL 中传递的内容。使用 sig 参数将此签名附加到 URL:

我目前的实现如下:

我最初收到的签名密钥是经过修改的 Base64,这就是我替换 -+_/ 字符的原因。此实现返回了正确的签名密钥,但不一致。

在将 Objective-C 转换为 C 时,我做错了什么吗?有没有更好的方法来处理这个?

我的应用程序正在使用 ARC。

0 投票
1 回答
1962 浏览

salesforce - Salesforce 创建不正确的 HMAC SHA1 值

我正在尝试使用 Crypto generateMac 函数在 Salesforce 中生成 HMAC 值,但结果与其他实用程序不匹配。

例如,我正在尝试Hash me使用 key对值进行哈希处理ac67ad3b8771bf63d4fa9582845a18f921514f36。我期待结果是66fe419859ac42ad88354dfa52f2196a26d767e1,但实际上是7d1f56c728dfefdcb9edb72b7c0c8df2acf1cae9

我的顶点代码是:

我猜这个问题与转换为二进制或可能与大小写有关,但我无法匹配预期的结果。

我的预期结果基于http://hash.online-convert.com/sha1-generator和其他几个在线 HMAC 计算器的结果。

0 投票
1 回答
9077 浏览

c - 在 C 中实现 hmac sha1

我正在尝试一小段会生成 Hmac-sha1 的代码。我被要求使用 OpenSSL 库自己编写 hmac 实现以进行 SHA1 计算。在为算法“维基”之后,这是我下面的内容。我使用了带有 RFC 2246 指定测试值的输入:

使用我使用 RFC2104 中的示例完成的以下代码,我可以根据需要获取 COUNTER = 0 的值,但是当 COUNTER 值设置为其他值(如上面的 2,3 等)时,HMAC SHA1 与上述值不匹配在 RFC 2246 中。另外一个问题是,如果我使用 memcpy 和 memset 而不是 bzero 或 bcopy,代码会显示一个不同的(错误的)Hmac Sha1 值,它与 COUNTER = 0 值不匹配。请解释为什么会出现这种奇怪的行为?

0 投票
1 回答
228 浏览

c# - 使用盐生成哈希 - 与 perls 模块等效

我正在尝试在 C# 中实现计算的哈希值,它应该与 Perl 模块生成的哈希值相匹配

perl代码如下

输出为:a4584f550a133a7f47cc9bafd84c9870

我在 C# 中尝试了以下方法 - 但无法获得相同的结果。

作为最后的手段,我可​​能会求助于启用 perl cgi 来计算遗留哈希..但我想尽可能避免这种情况!

谢谢!

0 投票
1 回答
556 浏览

perl - 无法加载 HMAC_SHA1 插件

在 Perl 中运行 Twitter 应用程序并面临上述问题。Perl 是 5.8.8,系统是 AIX,没有 root 访问权限。

代码

错误

无法在 /vv/mm/tt/perl5/lib/perl5/Net/Twitter/Lite.pm 第 192 行加载 HMAC_SHA1 插件

无论如何

运行良好。

输出/输出

摘要::HMAC_SHA1 是最新的 (1.03)。

并且 SHA1 运行不正常

运行 make test 没有成功就无法测试 运行 make install Make 已返回错误状态,安装似乎不可能 在此命令期间失败:GAAS/Digest-SHA1-2.13.tar.gz
:make NO

0 投票
1 回答
441 浏览

asp.net-web-api - ASP.NET Web API / HMAC Authentication,如何代表用户授权?

我正在阅读这篇文章http://rc3.org/2011/12/02/using-hmac-to-authenticate-web-service-requests/并且我理解 HMAC 是如何工作的。

问题是 HMAC 似乎只对第三方(中继方)进行身份验证。如果第三方想要通过我的系统用户和他/她的密码来提取用户的特定数据怎么办?我不想使用 OAuth 1.0 或 2.0,因为它们存在各种问题。在我看来,我也需要对用户进行身份验证,而不仅仅是授权?

例如,Evernote 移动应用程序要求我输入用户名/密码,我确信它在后台调用某种 Web API。它没有使用 OAuth 2.0 对吗?因为我没有看到自己重定向到提供者站点来“授权”。在这种情况下,我的用户名/密码是如何传递给后端服务的?

[编辑]

经过一番思考,我假设 SSL 是解决方案?拥有 SSL 后,您可以将用户名/密码以纯文本形式传递给我的 Web api,然后我会做任何事情来验证第三方 PLUS 验证用户并使用用户数据进行响应?

在那种情况下,缺点是我必须信任第三方?所以他们不存储我用户的用户名+密码,对吗?

0 投票
1 回答
1097 浏览

coldfusion - 尝试使用 ColdFusion 为 API 身份验证创建 HMAC-SHA1 哈希

我对此束手无策,只是找不到正确的代码组合来完成这项工作。我正在尝试为 API 查询创建身份验证摘要。我尝试了许多 CFML 函数(例如: Coldfusion HMAC-SHA1 加密HMAC SHA1 ColdFusion),但我没有得出与 API 文档中引用的相同结果。这是该示例(基本上是请求标头的元素,以换行符作为分隔符。):

这是关键:

根据文档,这应该导致:

当 HMAC 哈希转换为 Base64 时。任何想法将不胜感激!

0 投票
1 回答
1985 浏览

ios - 通过 post xml 向 quickblox 发送授权请求时出现无效签名错误

我正在尝试学习如何将名为 quickblox 的服务用于我的 iphone 应用程序后端。我在验证我的应用程序与 quickblox 服务的连接时遇到了问题。为了授权连接,我需要通过发送包含我的应用程序 ID、auth_key、时间戳、随机数和签名的发布请求来从 quickblox 获取令牌。然而,当我发送 post 请求时,服务器回复状态码 422,表明我的签名无效。签名是通过获取应用程序 ID、身份验证密钥、时间戳和 nonce 并用它生成 hmac-sha1 哈希来完成的。我已经验证了我的 hmac-sha1 生成器工作正常,所以我不知道我的邮政编码是错误的还是其他原因,因为它总是返回签名错误。这是我的应用程序委托:

文档说请求应该像这样格式化。有没有人看到发布请求有问题,我的格式不正确吗?文档说它应该像这样格式化:

提前致谢。

0 投票
1 回答
1642 浏览

java - 在 Java 中验证 Open SSL SHA1 哈希

在我们的项目中,我们使用以下 OpenSSL 函数创建 SHA1 哈希,

我们正在使用一个密钥,并且多次调用 SHA1_Update。

我必须使用 Java 验证该哈希。我写了以下功能,

我正在使用带有密钥的 hmacSha1Init 并使用 Mac 多次更新,最后使用 mac 调用 hmacSha1Final。

前任。

但我没有得到通过 OpenSSL 生成的相同 SHA1 哈希值。网络上的文档非常有限。有人可以指导我吗

0 投票
1 回答
222 浏览

security - 散列和使用时间作为盐,以防止未经授权的系统访问和重放攻击

我目前正在为手机游戏编写用户身份验证 API。我想确保用户只能从移动应用程序访问系统。(也就是说,如果从浏览器或 CURL(未经授权的系统)访问服务器 API,即使确切的 POST 参数有效,服务器也必须拒绝访问)。理想情况下,系统也不应该允许重放攻击。

有没有人知道如何做到这一点的想法或例子?

我正在考虑在客户端应用程序上添加一个具有当前时间戳的每个用户唯一的盐,并使用私钥对参数进行 SHA256 处理,然后在服务器上对其进行验证。这种方式将阻止来自浏览器或 CURL 的访问,因为攻击者需要获取私钥才能计算 SHA256 哈希。salt(包括时间戳)也将作为参数之一发送,如果超过特定时间,服务器将获取时间戳并拒绝访问。但是我不太确定安全性以及它是否是常见的或正确的做法,因为我从未设计过安全的应用程序,或者以前看过一个源代码。

感谢您的输入!