- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试测试来自 ankoder.com 的 API authentication token 的摘要计算有问题.当我尝试从 C# 调用时,示例是 ruby 。当我比较 HMAC-SHA1 中的摘要结果时,我发现 key 结果有问题。
为了便于测试这里是代码:
require 'hmac-sha1'
require 'digest/sha1'
require 'base64'
token="-Sat, 14 Nov 2009 09:47:53 GMT-GET-/video.xml-"
private_key="whatever"
salt=Digest::SHA1.hexdigest(token)[0..19]
passkey=Base64.encode64(HMAC::SHA1.digest(private_key, salt)).strip
这给了我结果:“X/0EngsTYf7L8e7LvoihTMLetlM=\n”如果我在 C# 中使用以下代码尝试此操作:
const string PrivateKey = "whatever";
var date = "Sat, 14 Nov 2009 09:47:53 GMT";//DateTime.Now.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss") + " GMT";
string token=string.Format("-{0}-GET-/video.xml-", date);
var salt_binary=SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(token));
var salt_hex=BitConverter.ToString(salt_binary).Replace("-", "").ToLower();
var salt =salt_hex.Substring(0,20);
var hmac_sha1 =
new HMACSHA1(Encoding.ASCII.GetBytes(salt));
hmac_sha1.Initialize();
var private_key_binary = Encoding.ASCII.GetBytes(PrivateKey);
var passkey_binary = hmac_sha1.ComputeHash(private_key_binary,0,private_key_binary.Length);
var passkey = Convert.ToBase64String(passkey_binary).Trim();
salt 结果相同,但 passkey 结果不同 - C# 给我:
QLC68XjQlEBurwbVwr7euUfHW/k=
两者都生成盐:f5cab5092f9271d43d2e
知道发生了什么吗?
最佳答案
您在 C# 代码中将 PrivateKey
和 salt
放在了错误的位置;根据您的 Ruby 代码,PrivateKey
是 HMAC 的 secret key 。
另请注意,您在 Ruby 程序生成的散列的末尾包含了一个换行符(无论如何,根据您的示例输出)。您必须不包含换行符,否则哈希将不匹配。
此 C# 程序更正了第一个问题:
using System;
using System.Security.Cryptography;
using System.Text;
namespace Hasher
{
class Program
{
static void Main(string[] args)
{
const string PrivateKey = "whatever";
string date = "Sat, 14 Nov 2009 09:47:53 GMT";
string token = string.Format("-{0}-GET-/video.xml-", date);
byte[] salt_binary = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(token));
string salt_hex = BitConverter.ToString(salt_binary).Replace("-", "").ToLower();
string salt = salt_hex.Substring(0, 20);
HMACSHA1 hmac_sha1 = new HMACSHA1(Encoding.ASCII.GetBytes(PrivateKey));
hmac_sha1.Initialize();
byte[] private_key_binary = Encoding.ASCII.GetBytes(salt);
byte[] passkey_binary = hmac_sha1.ComputeHash(private_key_binary, 0, private_key_binary.Length);
string passkey = Convert.ToBase64String(passkey_binary).Trim();
}
}
}
关于c# - ruby 中的 hmac-sha1 不同于 C# HMACSHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733957/
我正在尝试在 Elixir 中编写亚马逊产品广告 API 客户端。开发者指南描述了 the process for signing an API request其中必须使用请求和“ secret 访问
我在AIX上运行脚本时遇到以下错误 Reading configuration data /ecmsq1vg1/home1/aradmin/.ssh/config Reading configurat
见 OpenSSL::HMAC documentation . 我正在尝试这个: require "openssl" puts OpenSSL::HMAC.hexdigest(:sha256, "se
我正在使用 https://github.com/DaGenix/rust-crypto并且有一些奇怪的错误: extern crate crypto; use crypto::sha2::{Sha2
我们有一个 python 网络服务。它需要一个散列作为参数。python中的hash就是这样生成的。 hashed_data = hmac.new("ant", "bat", hashlib.
这将是一个很长的问题,但我有一个非常奇怪的错误。我在 C++ 中使用 OpenSSL 来计算 HMAC,并将它们与使用 javax.crypto.Mac 的模拟实现进行比较。对于某些 key ,HMA
我在我的代码中发现了一个巨大的问题,我完全不知道是什么导致了这个问题。 所以,当我向我的服务器发送请求时,我对请求中的字符串进行哈希处理。这有时是用户输入。 我的应用是多语言的,所以我必须支持所有“ä
我想弄清楚为什么 openssl 中的 hmac 没有给我与 java 中的 hmac 相同的结果。 在开放的 ssl 中 echo -n "Hello" | openssl dgst -sha256
与: KEY='7vgd39eyxald9sucClM7' DATA='POST\nmultipart/form-data\nWed, 10 Jun 2015 07:27:43 GMT\n/1/cla
我正在尝试转换一个 secret 的 hmac 字符串,以允许我在 postman 中测试我的 api。 Postman 预装了 cryptojs。这是我在我的测试服务器上使用加密的过程: const
Security.Cryptography.HMACSHA256.Create() 和 Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA
图例 我公开了一个 API,它要求客户端通过发送两个 header 来签署请求: Authorization: MyCompany access_key: Unix-TimeStamp: 要创建签名
我在 Android 上遇到一些 HMAC 问题。我将 SHA1 算法与以下代码一起使用,在搜索 android hmac-sha1 时会在整个网络上显示。 String base_s
HS256 和 HS512 加密算法之间是否存在实际差异,或者与已经牢不可破的 key 相比,更长的 key 是否多余?我应该使用哪一个来加密 JWT token ? 是否有可能将 HS512 加密与
我需要使用 SHA512 加密的 cHMAC 我使用此方法获得的加密值和服务器端值不匹配他们使用 Java 的服务器端可以请帮助我解决这个问题。 服务器端加密值是 85d86c928825ef85d5
我从https://www.rfc-editor.org/rfc/rfc6238借用了HMAC-SHA1 Java代码并略微调整以对其进行硬编码,以使用具有已知输出的一对已知 key /消息。 然后我
我正在用 go 开发一个网络服务器, 在顶部我有 import ("net/http" "log" "fmt" "encoding/json" "encoding/he
使用 Node.js 加密模块时 const crypto = require('crypto'); HMACseed = crypto.createHmac('sha512', 'a55e3
我正在寻找用于密码加密的正确 Java 算法,我发现 Java SDK 提供了 PBKDF2WithHmacSHA1,但没有提供 PBKDF2WithHmacSHA256。 我听说 HMAC-SHA2
所以我一直在查看维基百科的 HMAC 伪代码,它看起来相对简单;如果您的 key 大小已经是块大小,则伪代码可归结为 3 行: o_key_pad ← key xor [0x5c * bloc
我是一名优秀的程序员,十分优秀!