标签: hmac

Ruby和PHP HMAC不同意

我正在尝试在Ruby中创建一个HMAC,然后在PHP中验证它.

红宝石:

require 'openssl'
message = "A522EBF2-5083-484D-99D9-AA97CE49FC6C,1234567890,/api/comic/aWh62,GET"
key     = "3D2143BD-6F86-449F-992C-65ADC97B968B"
hash    = OpenSSL::HMAC.hexdigest('sha256', message, key)
p hash
Run Code Online (Sandbox Code Playgroud)

PHP:

<?php
  $message = "A522EBF2-5083-484D-99D9-AA97CE49FC6C,1234567890,/api/comic/aWh62,GET";
  $key     = "3D2143BD-6F86-449F-992C-65ADC97B968B";
  $hash    = hash_hmac("sha256", $message, $key);
  var_dump($hash);
?>
Run Code Online (Sandbox Code Playgroud)

对于Ruby,我得到:20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3

对于PHP,我得到:e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

我和一些同事完全失去了,任何帮助都将不胜感激.

php ruby hmac

12
推荐指数
1
解决办法
5525
查看次数

为什么ComputeHash没有确定性地行动?

我遇到了一个有趣的问题..似乎ComputeHash()对于"HMACSHA256"哈希不是确定性的行为..如果我使用HashAlgorithm.Create("HMACSHA256")创建两个HashAlgorithm实例..并运行ComputeHash,我得到两个不同的结果..下面是一个展示这种行为的示例静态类.

internal static string HashPassword(byte[] bAll)
{
    using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
    {
        return Convert.ToBase64String(s.ComputeHash(bAll));
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使调用非静态(实际上它开始非静态,我有双重和三重四重四重检查我的输入数组..它在每次调用时绝对相同..我甚至在immidiate中做过的事情窗口像:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)
Run Code Online (Sandbox Code Playgroud)

并通过方法中的断点在immidiates窗口中运行两次返回两个不同的哈希值.

我知道哈希被认为是确定性的.那么是什么给出了什么呢?在调试器中运行是怎么回事?还是其他任何想法?真的,现在这只是两个奇怪的词:-P ..

谢谢乔希

.net c# hmac hashalgorithm

12
推荐指数
2
解决办法
2895
查看次数

困惑如何使用AES和HMAC

我有点困惑如何在从服务器向客户端传输加密消息时以正确的方式使用AES和HMAC(基于SHA-256),反之亦然

如果以下方法错误,请纠正我:

  1. 从密钥文件中获取安全密钥(例如,我们建议使用AES-256,我们已经有一个有效的256位长度密钥)
  2. 为AES-256生成随机IV,以确保相同的纯文本具有不同的加密输出.
  3. 使用纯文本和安全密钥计算HMAC-SHA-256.(第一个问题:我应该使用IV进行HMAC计算吗?例如附加到安全密钥?)
  4. 使用AES-256加密纯文本.
  5. 为客户撰写如下消息:HMAC + IV + ENCRYPTED_MESSAGE

最大的问题是:是否有可能不以某种方式将IV发送给客户端,而是以相同的方式生成它并且仍然是加密安全的?或者也可以发送IV吗?

我最终得到随机IV生成,因为需要相同的纯文本将以不同的加密结果结束.

cryptography aes hmac

12
推荐指数
1
解决办法
2万
查看次数

Node JS crypto,无法在带重音的字符上创建hmac

当我尝试加密的文本具有重音字符(例如ä,ï,ë)时,我遇到了在NodeJS中生成正确签名(使用crypto.js)的问题

generateSignature = function (str, secKey) { 
 var hmac = crypto.createHmac('sha1', secKey);
 var sig = hmac.update(str).digest('hex');
 return sig;
};
Run Code Online (Sandbox Code Playgroud)

如果'str'不包含重音字符(如ä,ï,ë等字符),则此函数将返回正确的HMAC签名.如果文本中存在重音字符,则不会返回正确的HMAC.重音字符在UTF8编码中有效,所以我不知道为什么加密有问题.可能是我需要以某种方式告诉加密我正在签署utf8编码文本,但我不知道如何做到这一点.

这篇文章中描述了完全相同的问题:带有重音的NodeJS hmac摘要问题 然而,帖子本身以及答案对我来说没有意义(因为他们传递他们想要加密的数据,秘密密钥应该在哪里走).

以下是str和secKey的硬编码值的代码版本:

  var crypto = require('crypto');

  str="äïë";  
  secKey="secret"; 
  var hmac = crypto.createHmac('sha1', secKey);
  var sig = hmac.update(new Buffer(str, 'utf8')).digest('hex');
  console.log("Sig:      " + sig);
  console.log("Expected: 094b2ba039775bbf970a58e4a0a61b248953d30b"); 
  // "Expected" was generated using http://hash.online-convert.com/sha1-generator
Run Code Online (Sandbox Code Playgroud)

输出::

西格:39c9f1a6094c76534157739681456e7878557f58

预计:094b2ba039775bbf970a58e4a0a61b248953d30b

谢谢

utf-8 hmac non-ascii-characters node.js node-crypto

12
推荐指数
1
解决办法
5723
查看次数

我如何解密HMAC?

我可以使用以下内容制作HMAC:

var encrypt = crypto.createHmac("SHA256", secret).update(string).digest('base64');
Run Code Online (Sandbox Code Playgroud)

我试图用秘密解密编码的HMAC:

var decrypt = crypto.createDecipher("SHA256", secret).update(string).final("ascii");
Run Code Online (Sandbox Code Playgroud)

以下是不成功的.如何用密钥解密HMAC?

我收到以下错误:

node-crypto : Unknown cipher SHA256

crypto.js:155
  return (new Decipher).init(cipher, password);
                        ^
Error: DecipherInit error
Run Code Online (Sandbox Code Playgroud)

cryptography sha256 hmac node.js

12
推荐指数
2
解决办法
5万
查看次数

使用HMAC-SHA1加密创建OAuth签名返回HTTP 401

问题
您好,我需要对需要OAuth加密的API进行身份验证.
我的方向正确,但我确信我的签名基本字符串有问题.由于HMACSHA1 Hash基于Key和BaseString,因此我得到了错误的oauth_signature.
OAuth签名流程

到目前为止,
我已经能够收集所有必需的数据,其中包括:

  • 消费者密钥
  • 消费者秘密
  • Acces Token
  • Acces Secret
  • Sha1Hased Value(基于Key和Message,其中Message是签名Base string)
  • 签名基本字符串

问题
我因签名无效而返回HTTP(401错误请求).
注意:我很确定这是我如何构建我的签名基本字符串.有关我使用的API文档的信息,请查看底部页面.

代码

GetOAuthToken(执行实际请求)

public static string GetAuthorizationToken()
{
    string TimeInSecondsSince1970 = ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString();
    string Nonce = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(TimeInSecondsSince1970
    + TimeInSecondsSince1970 + TimeInSecondsSince1970));
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(GetAppleApiUrl.GetUrl(AppleApiUrl.SESSION_TOKEN));
    httpWebRequest.Method = "GET";

    string consumer_secret = Uri.EscapeDataString(Settings.SettingsManager.consumer_secret);
    string token_secret = Uri.EscapeDataString(Settings.SettingsManager.access_secret);

    string signature_base_string = GetSignatureBaseString(TimeInSecondsSince1970, Nonce);
    string SHA1HASH = GetSha1Hash(consumer_secret + "&" + token_secret, signature_base_string);

    string Header = …
Run Code Online (Sandbox Code Playgroud)

.net c# http oauth hmac

12
推荐指数
1
解决办法
8397
查看次数

在Ruby中使用HMAC SHA256

我正在尝试应用HMAC-SHA256来生成Rest API的密钥.

我正在做这样的事情:

def generateTransactionHash(stringToHash)
  key = '123'
  data = 'stringToHash'
  digest = OpenSSL::Digest.new('sha256')

  hmac = OpenSSL::HMAC.digest(digest, key, data)
  puts hmac
end
Run Code Online (Sandbox Code Playgroud)

输出总是这样:(如果我把'12345'作为参数或'HUSYED815X',我也会得到相同的结果)

?w/{o???p?T????:??a?h??E|q
Run Code Online (Sandbox Code Playgroud)

由于这个原因,API无法正常工作......有人可以帮助我吗?

ruby ruby-on-rails sha256 hmac

12
推荐指数
2
解决办法
8471
查看次数

用于在Android上生成HMAC-SHA1 OAuth签名的库?

使用下面的规范,我需要在Android上创建oauth_signature.我正在寻找一个处理锅炉板代码的库,用于创建通过OAuth访问资源的签名.

  1. 构造一个签名"基本字符串",它由三个请求元素的串联组成:

    • HTTP请求方法.
    • 请求发送到的基本URL.此URL不应包含任何查询参数.在签署对Google服务的调用时,请参阅OAuth规范第9.1.2节,了解相关说明.
    • 请求中参数的标准化字符串(不包括oauth_signature参数).这包括请求标头或正文中发送的参数,以及添加到请求URL的查询参数.要规范化字符串,请使用词典字节值排序对参数进行排序.有关规范化此字符串的更多详细信息,请参阅OAuth规范的第9.1.1节.
  2. 使用以下序列之一生成oauth_signature:

    • 如果您的应用程序已注册且您正在使用HMAC-SHA1,请使用注册期间生成的OAuth"consumer secret"值; 此值显示在您域的注册页面上.

java android sha1 oauth hmac

11
推荐指数
2
解决办法
1万
查看次数

如何在RESTful WCF API中实现HMAC身份验证

我们正在使用WCF构建一个RESTful API(目前.Net 3.5,但很快将转向.Net 4).我们有一个功能框架,但目前没有安全保障.它需要可以从.Net应用程序以及iOS,Android和Web应用程序访问.

我们想使用此处此处描述的HMAC身份验证方案,但在描述如何验证哈希时,这两个示例似乎都分崩离析.第一个示例无法描述UserKeys对象(哈希表?),第二个示例缺少客户端和服务器端的GetUserKey方法.

任何人都可以解释如何在这些示例中生成/存储/检索/使用"用户密钥"/令牌,或者提供如何在RESTful WCF服务中使用HMAC授权的更好示例(如果可能的话,还有源代码)?

编辑: 经过更多的研究,我们确定我们需要更多的" 授权 "技术而不是" 身份验证 "技术(语义?).我们实施了基本授权并保护了SSL背后的API.基本授权使用与Web请求相同的"授权"标头作为HMAC 身份验证方案,但传递用Base64编码的用户名:密码字符串而不是令牌.这允许我们针对我们的数据库自定义验证用户,以确定用户是否获得许可并具有访问所需API方法的适当安全权限.

我们当然愿意听取有关如何完成自定义用户名/密码验证的其他选项以及其他保护API的方法.

c# authentication wcf hmac

11
推荐指数
1
解决办法
2万
查看次数

如何在Elixir中生成HMAC字符串?

我正在尝试在Elixir中编写Amazon Product Advertising API客户端.开发人员指南描述了签署API请求的过程,其中必须使用请求和"秘密访问密钥"创建HMAC-SHA26哈希.这是我写的用来处理签名请求的函数:

defp sign_request(url) do
  url_parts = URI.parse(url)
  request = "GET\n" <> url_parts.host <> "\n" <> url_parts.path <> "\n" <> url_parts.query
  url <> "&Signature=" <> :crypto.hmac(:sha256, 'ThisIsMySecretAccessKey', request)
end
Run Code Online (Sandbox Code Playgroud)

传递给函数的url看起来像这样: http://webservice.amazon.com/onca/xml?AssociateTag=ThisIsMyAssociateTag&AWSAccessKeyId=ThisIsMyAWSAccessKeyId&Keywords=stuff&Operation=ItemSearch&SearchIndex=Apparel&Service=AWSECommerceService&Timestamp=2014-11-22T12%3A00%3A00Z&Validate=True&Version=2013-08-01

我遇到的问题是,虽然:crypto.hmac/3返回二进制文件,但该二进制文件不是字符串; 通过返回值String.valid?/1回报false.因此,我无法将返回值连接到url字符串的末尾以对请求进行签名.

我使用:crypto.hmac/3不正确吗?有什么我想念的吗?我还有另一种方法吗?

elixir erlang-otp sha256 hmac amazon-product-api

11
推荐指数
1
解决办法
6521
查看次数