标签: hmac

用于在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万
查看次数

如何为SHA256获取Ruby生成的HMAC,以便安全地匹配Java?

我有一个运行一些Java代码的tomcat服务器,允许用户使用API​​密钥进行身份验证.该请求使用使用SHA256创建的HMAC.我有一个Ruby客户端,我用它来发出请求,因为我刚接触加密,我很难让它生成匹配的HMAC.我试过不把它设为URL安全,并且匹配.所以我真的很想知道如何让Ruby客户端与URL安全版本匹配(因为我无法更改Java代码).它最后只有一个额外的=字符.在此先感谢您的帮助.

对于Ruby我使用1.9.3而对于Java我使用6u31以及来自apache的commons-codec-1.6.jar库.

红宝石:

require "openssl"
require "base64"

json_str = "{'community':'LG7B734A', 'login_id':'user1', 'time':'1331928899'}"
digest = OpenSSL::Digest::Digest.new("sha256")
key = [ "4cc45e4258121c3fec84147673e1bd88e51b1c177aafcfa2da72bd4655c9f933" ]
hmac = OpenSSL::HMAC.digest(digest, key.pack("H*"), json_str)

encoded_url_safe = Base64.urlsafe_encode64(hmac)
encoded = Base64.encode64(hmac)

puts("Encoded (Url Safe): " + encoded_url_safe)
puts("Encoded           : " + encoded)
Run Code Online (Sandbox Code Playgroud)

Java的:

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;

import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Mac;

public class ExampleHMAC
{
    public static void main(String[] args) throws Exception
    {
        String key = "4cc45e4258121c3fec84147673e1bd88e51b1c177aafcfa2da72bd4655c9f933";
        byte[] keyBytes = Hex.decodeHex(key.toCharArray());

        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
        Mac mac …
Run Code Online (Sandbox Code Playgroud)

ruby java sha256 hmac

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

创建Facebook AppSecret_Proof HMACSHA256需要C#帮助

Facebook要求我创建appsecret_proof:https: //developers.facebook.com/docs/graph-api/securing-requests

我使用以下代码完成了此操作:

public string FaceBookSecret(string content, string key)
{
        var encoding = new System.Text.ASCIIEncoding();
        byte[] keyByte = encoding.GetBytes(key);
        byte[] messageBytes = encoding.GetBytes(content);
        using (var hmacsha256 = new HMACSHA256(keyByte))
        {
            byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
            return Convert.ToBase64String(hashmessage);
        }
}
Run Code Online (Sandbox Code Playgroud)

一切看起来都不错,但facebook说appsecret_proof无效.我已登录,当我删除密钥时,我可以正常地完成所有操作.所以节省一些时间:

  • 是的我发布到正确的URL
  • 是的我传递了有效的access_token
  • 是的我在证明中使用相同的access_token,就像我在请求中一样
  • 是的,我的appsecret很好,并且有效

使用示例

dynamic results = client.Post("/" + model.PostAsId + "/feed", new { message = model.Message, appsecret_proof = FaceBookSecret(postAs.AuthToken, AppSecret) });
Run Code Online (Sandbox Code Playgroud)

我认为它可能与编码或其他东西有关,但说实话,我只是不知道.

我也在使用Facebook .net SDK,但这在文档中没有多少,并且似乎没有涉及与自动化,服务器端操作等有关的任何事情.

谢谢

c# asp.net facebook hmac facebook-c#-sdk

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

如何使用HMAC-SHA512和Python请求库签署POST请求?

我正在尝试使用Python来访问poloniex.com上的交易API,这是一种加密货币交换.要做到这一点,我必须遵循这个处方:

所有对交易API的调用都通过HTTP POST发送到https://poloniex.com/tradingApi,并且必须包含以下标题:

密钥 - 您的API密钥.
Sign - 根据HMAC-SHA512方法,由密钥的"秘密"签名的查询的POST数据.

此外,所有查询都必须包含"nonce"POST参数.nonce参数是一个整数,必须始终大于之前使用的nonce.

这是我到目前为止所拥有的.我目前的问题是我不知道如何编译POST网址,以便可以在不先发送未完成请求的情况下对其进行签名.这显然不起作用.

import requests
import hmac
import hashlib
import time

headers = { 'nonce': '',
            'Key' : 'myKey',
            'Sign': '',}
payload = { 'command': 'returnCompleteBalances',
            'account': 'all'}
secret = 'mySecret'

headers['nonce'] = int(time.time())
response = requests.post( 'https://poloniex.com/tradingApi', params= payload, headers= headers )
headers['Sign'] = hmac.new( secret, response.url, hashlib.sha512)
Run Code Online (Sandbox Code Playgroud)

python hmac python-requests

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

通过 Postman 进行 HMAC 身份验证

我正在使用一个示例为 Web API 项目设置 HMAC 身份验证。原始示例源代码/项目可在此处获得:

http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/

我试图让 Postman 在它的预请求脚本中构建和发送 GET 请求。但是请求总是以 401 失败,我不知道为什么。
邮递员预请求脚本:

var AppId = "4d53bce03ec34c0a911182d4c228ee6c";
var APIKey = "A93reRTUJHsCuQSHR+L3GxqOJyDmQpCgps102ciuabc=";
var requestURI = "http%3a%2f%2flocalhost%3a55441%2fapi%2fv1%2fdata";
var requestMethod = "GET";
var requestTimeStamp = "{{$timestamp}}";
var nonce = "1";
var requestContentBase64String = "";

var signatureRawData  = AppId + requestMethod + requestURI + requestTimeStamp +  nonce + requestContentBase64String; //check
var signature = CryptoJS.enc.Utf8.parse(signatureRawData);
var secretByteArray = CryptoJS.enc.Base64.parse(APIKey);
var signatureBytes = CryptoJS.HmacSHA256(signature,secretByteArray)

var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);
postman.setGlobalVariable("key", "amx " + AppId + …
Run Code Online (Sandbox Code Playgroud)

c# security hmac postman

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

HMACSHA256和HMACSHA512之间的差异

我们使用以下代码针对C#中的敏感值生成HMac哈希

public string GenerateHMac(string key, string message)
{
    var decodedKey = Convert.FromBase64String(key);

    var hasher = new HMACSHA256(decodedKey);

    var messageBytes = Encoding.Default.GetBytes(message);

    var hash = hasher.ComputeHash(messageBytes);

    return Convert.ToBase64String(hash);
}
Run Code Online (Sandbox Code Playgroud)

传入的密钥是256位base 64编码字符串.提出了一个问题,我们是否应该使用HMACSHA256,HMACSHA384或HMACSHA512来散列该值.

  • 使用HMACSHA512相对于HMACSHA256有什么好处?
  • 它更安全吗?
  • 使用更长的密钥时是否会产生显着的性能影响?

作为旁注; decodedKey如果我使用HMACSHA512,我传递给构造函数的值是否需要是512位密钥?

c# security cryptography hmac

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

React-Native + crypto:如何在React-Native中生成HMAC?

我试过加密,这显然不起作用,因为它取决于节点运行.所以,我转向加密浏览,但我相信存在依赖性问题.如果有人可以提供帮助,我会非常感激.

作为参考,我之前使用过像这样的加密:

crypto.createHmac('md5', "MY_KEY").update('SOMETHING_TO_ENCRYPT').digest('hex');
Run Code Online (Sandbox Code Playgroud)

编辑

我正在尝试加密用密钥腌制的字符串.上面的代码是我之前用来实现的.我需要在React-Native中进行类似的操作.

当尝试使用crypto-browserify(我认为它可以在React-Native中工作)时,我在打包器中获得以下内容:

Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/plist-parser/node_modules/sax/lib/sax.js
Unable to resolve module string_decoder from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/plist-parser/node_modules/sax/lib/sax.js
Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/create-hash/node_modules/cipher-base/index.js
Unable to resolve module string_decoder from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/create-hash/node_modules/cipher-base/index.js
Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/create-hmac/browser.js
Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/node_modules/cipher-base/index.js
Unable to resolve module string_decoder from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/node_modules/cipher-base/index.js
Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/cipher-base/index.js
Unable to resolve module string_decoder from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/cipher-base/index.js
Unable to resolve module stream from /Users/kelseyregan/BitBucket/React-Native-core/reup/node_modules/crypto-browserify/node_modules/browserify-sign/browser.js
Unable …
Run Code Online (Sandbox Code Playgroud)

cryptography hmac react-native

10
推荐指数
1
解决办法
5039
查看次数

什么是Java SecretKeySpec的C#等价物

我有以下用Java编写的代码

Mac mac = Mac.getInstance("HmacSHA1");
String secretKey ="sKey";
String content ="Hello";

byte[] secretKeyBArr = secretKey.getBytes();    
byte[] contentBArr = content.getBytes();

SecretKeySpec secret_key = new SecretKeySpec(secretKeyBArr,"HmacSHA1");
byte[] secretKeySpecArr = secret_key.getEncoded();

mac.init(secret_key);

byte[] final = mac.doFinal(contentBArr);
Run Code Online (Sandbox Code Playgroud)

我想在C#中做同样的例子.所以,我写了下面的代码

HMACSHA1 hmacsha1 = new HMACSHA1();
string secretKey = "sKey";
string content = "Hello";

byte[] secretKeyBArr = Encoding.UTF8.GetBytes(secretKey);
byte[] contentBArr = Encoding.UTF8.GetBytes(content);

hmacsha1.Key = secretKeyBArr;
byte[] final = hmacsha1.ComputeHash(contentBArr);
Run Code Online (Sandbox Code Playgroud)

最终结果并不相同.secretKeyBArr和contentBArr是字节数组,它们的值在两个示例中都相同.未知的是传递给mac.init()的SecretKeySpec.那么,什么是C#中相同的同类?

c# java cryptography sha1 hmac

9
推荐指数
1
解决办法
7784
查看次数

在C#中生成一个强大的HMACSHA256密钥

我正在寻找在我正在构建的API中实现HMACSHA256请求签名.从我地理解https://tools.ietf.org/html/rfc4868,这是最好的秘密密钥是相同的位数的哈希算法(即SHA256密钥应该是256比特/ 32字节).

我可以使用C#中许多不同的随机数生成器之一,或者是否需要生成这些密钥的特定方法.

最后,亚马逊Web服务使用HMACSHA256,但他们提供的(至少对我来说)密钥是320比特/ 40字节(当关键是使用转换为字节UTF-8,看https://github.com/aws/ AWS-SDK-净/斑点/主/ AWSSDK/Amazon.Runtime /内部/认证/ AWS4Signer.cs#L205-L232).有没有理由使用散列算法超过需要,因为它被截断了?

c# hmac

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

HMAC-SHA256 in C with OpenSSL - 如何获得正确的输出

这是我用来编码字符串的函数:

\n\n
#include <openssl/evp.h>\n#include <openssl/hmac.h>\n\nunsigned char *mx_hmac_sha256(const void *key, int keylen,\n                              const unsigned char *data, int datalen,\n                              unsigned char *result, unsigned int *resultlen) {\n    return HMAC(EVP_sha256(), key, keylen, data, datalen, result, resultlen);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我如何调用它并检查结果:

\n\n
char *key = strdup("security is awesome");\nint keylen = strlen(key);\nconst unsigned char *data = (const unsigned char *)strdup("this is highly sensitive user data");\nint datalen = strlen((char *)data);\nunsigned char *result = NULL;\nunsigned int resultlen = -1;\n\nresult = mx_hmac_sha256((const void *)key, keylen, data, datalen, result, &resultlen);\n\nfor (unsigned int …
Run Code Online (Sandbox Code Playgroud)

c encryption openssl cryptography hmac

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