当我通过以下代码重现 SHA2 哈希时:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.digest("A".getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
它给了我一个字节数组,即: 85,-102,-22,-48,-126,100,-43,121,93,57,9,113,-116,-35,5,-85,-44,-107,114, -24,79,-27,85,-112,-18,-13,26,-120,-96,-113,-33,-3
但是当我通过 MySQL 重现相同的哈希时,它给了我一个字符串:5cfe2cddbb9940fb4d8505e25ea77e763a0077693dbb01b1a6aa94f2
如何转换 Java 的结果以便与 MySQL 的结果进行比较?
我正在根据我找到的 Python 代码编写一个小程序。有几行我需要帮助。它是关于使用 SHA256 加密的值。
python代码如下:
first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我的值如下:
first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)
我的 C# 代码是:
string first = sha256_hash((secret + auth_token));
string second = sha256_hash((timestamp.ToString() + secret));
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我的价值观是:
first: 9346e57a3c183186e9e24ebfda7ca4e7eb4d81196a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d9846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)
如您所见,这些值略有不同。python 代码返回两个长度为 64 个字符的值,其中在 C# 中,值分别为 60 个字符和 63 个字符。
我的 sha256_hash 方法来自这里:获取字符串的 SHA-256 字符串
任何帮助将不胜感激,谢谢。
我使用node.js 玩数字签名.出于测试目的,我创建了一些XML数据的数字签名,首先只使用SHA256,然后使用RSA-SHA256.
令我困惑的是,两种签名方法都创建了完全相同的签名.两个签名都是相同的.如果它们相同,那么为什么有两种不同的方法(SHA256与RSA-SHA256)?
我包括以下代码:
var crypto = require('crypto'),
path = require('path'),
fs = require('fs'),
pkey_path = path.normalize('private_key.pem'),
pkey = '';
function testSignature(pkey) {
var sign1 = crypto.createSign('RSA-SHA256'),
sign2 = crypto.createSign('SHA256');
fs.ReadStream('some_document.xml')
.on('data', function (d) {
sign1.update(d);
sign2.update(d);
})
.on('end', function () {
var s1 = sign1.sign(pkey, "base64"),
s2 = sign2.sign(pkey, "base64");
console.log(s1);
console.log(s2);
});
}
// You need to read private key into a string and pass it to crypto module.
// If the key is …Run Code Online (Sandbox Code Playgroud) 我正在编写一个需要使用 Dropbox 网络钩子的程序。我还没有找到任何已经到位的 Go 实现,所以我决定写我的。不幸的是,它似乎不起作用。
我认为这里的问题是hmac,因为我很可能做错了什么,但我似乎无法理解这里的问题到底在哪里。任何的想法?
以下是我所拥有的:
package dboxwebhook
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"errors"
"io"
"io/ioutil"
"log"
)
type Signature struct {
AppSecret []byte
Signature []byte
}
func (w *Signature) Check(reqBody io.ReadCloser) error {
if bytes.Compare(w.Signature, nil) == 0 {
return errors.New("DropBox signature doesnt exist")
}
// building HMAC key (https://golang.org/pkg/crypto/hmac/)
mac := hmac.New(sha256.New, w.AppSecret)
requestBody, err := ioutil.ReadAll(reqBody)
if err != nil {
return err
}
mac.Write(requestBody)
expectedMac := mac.Sum(nil)
log.Println(w.AppSecret)
log.Println(expectedMac)
log.Println(w.Signature)
// compare if …Run Code Online (Sandbox Code Playgroud) 我想比较和匹配哈希:
#include <stdio.h>
#include <string.h>
#include "sha256.h"
int main()
{
unsigned char password[]={"abc"}, gen_hash[32];
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx,password,strlen(password));
sha256_final(&ctx,gen_hash);
unsigned char orig_hash[] = {"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"};
if(strcmp(orig_hash, gen_hash) == 0)
{
printf("%s\n", "match");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但如果我比较两个哈希值,它们就不一样了.有谁碰巧知道为什么?我认为两个变量都是一样的,但它们不是吗?
我们正在尝试在 ruby 中实现 SHA256 Base64 哈希,它没有像在 C# 中那样返回预期的结果。
下面是我们的 C# 示例代码。
public static string HashSHA256ToBase64(string phrase)
{
if (phrase == null)
return null;
var encoder = new UTF8Encoding();
var sha256Hasher = new SHA256CryptoServiceProvider();
var hashedDataBytes = sha256Hasher.ComputeHash(encoder.GetBytes(phrase));
return Convert.ToBase64String(hashedDataBytes);
}
Run Code Online (Sandbox Code Playgroud)
为此,我们需要用 ruby 编写等效的代码。为此,我们正在尝试如下。
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), "", phrase))
Run Code Online (Sandbox Code Playgroud)
它提供的结果与 C# 不同。
测试短语:V2dcZBpzzglD1ynW5ZAyFocs9wtpR624wlla9gujw0I=RquZ/QzazPM=
预期结果:utXwt733s9FmiSM69o2zGOm0IT42FjthbB0oquIuPak=
有人可以用等效的 ruby 代码帮助我解决这个问题吗
我正在使用python和flask开发一个webapp。它有一个用户系统,当然还有一个注册表。我正在使用 passlib.hash.sha256 来加密想要注册的用户的密码。这是我在做什么:
from passlib.hash import sha256_crypt as sha256
[...]
if request.method == "POST" and form.validate():
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
email = request.form['email']
password = sha256.encrypt(password) #Encryption.
c, conn = connection('accounts') #Connection to the database
x = c.execute("SELECT * FROM accounts WHERE username = '%s' OR email = '%s'" %(thwart(username), thwart(email)))
if x:
flash("We are very sorry, but this Username/Email-address is already taken. Please try again")
else:
c.execute('INSERT INTO accounts VALUES ("%s", "%s", "%s")' %(thwart(username), …Run Code Online (Sandbox Code Playgroud) 我尝试在消息上使用 base64 解码的密钥生成 sha256 HMAC。我想使用飞镖语言。在 python 中,我可以使用以下代码来完成:
# PYTHON CODE
import hmac, hashlib, base64
...
message = 'blabla'
secret = 'DfeRt[...]=='
secret_b64 = base64.b64decode(secret)
signature = hmac.new(secret_b64, message, hashlib.sha256)
signature_b64 = signature.digest().encode('base64').rstrip('\n')
Run Code Online (Sandbox Code Playgroud)
这是我用飞镖尝试过的:
// DART CODE
import 'package:crypto/crypto.dart';
import 'dart:convert';
...
String message = 'blabla';
String secret = 'DfeRt[...]=='
var secret_b64 = BASE64.decode(secret);
var hmac = new Hmac(sha256, secret_b64);
// what now?
Run Code Online (Sandbox Code Playgroud)
但后来我不知道如何继续。我发现了一些旧的示例代码,如下所示
var message_byte = UTF8.encode(message);
hmac.add(message_byte);
Run Code Online (Sandbox Code Playgroud)
但是,Hmac 类中不再存在“add”方法。我也试过这个,但我不确定这是否正确
var message_byte = UTF8.encode(message);
var signature = hmac.convert(message_byte);
var signature_b64 …Run Code Online (Sandbox Code Playgroud) 为什么下面的powershell脚本:
$privateKey = "843c1f887b"
$requestData = "1543448572|d.lastname@firm.com|Firstname Lastname"
function signRequest {
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($privateKey)
$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($requestData))
$signature = [Convert]::ToBase64String($signature)
$outi = $signature
return $signature
}
Run Code Online (Sandbox Code Playgroud)
转换为哈希:
FipK51tOtzb2m2yFQAf5IK6BNthClnqE24luMzYMPuo=
Run Code Online (Sandbox Code Playgroud)
和其他具有相同输入的在线 hmac sha256 生成器:
162a4ae75b4eb736f69b6c854007f920ae8136d842967a84db896e33360c3eea
Run Code Online (Sandbox Code Playgroud)
任何建议我在脚本中做错了什么?谢谢!
我尝试连接到Binance ApiUsing C#And RestSharplib。根据文件,我应该尝试这样的事情:
查询字符串:符号=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
HMAC SHA256 签名:
[linux]$ echo -n "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559" | openssl dgst -sha256 -hmac "NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j" (stdin)= c8db56825ae71d6d71206000000000000000000000000000001c8db56825ae71d6d7920621bc8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c88c88c8888888
(HMAC SHA256) [linux]$ curl -H "X-MBX-APIKEY: vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A" -X POST https://api.binance.com/api.binance.order/api/quantity=YC&T&TyC&T=C&T&Q =0.1&recvWindow=5000×tamp=1499827319559&signature=c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71
我尝试了很多方法和很多堆栈问题,但我找到了其他语言而不是 c# 的解决方案。这是我所做的基于:这个和这个
public string GetAccountInfo()
{
long timeStamp = GetTimestamp();
var request = new RestRequest("api/v3/account");
request.AddHeader("X-MBX-APIKEY", ApiKey);
request.AddParameter("timestamp", timeStamp, ParameterType.QueryString);
request.AddParameter("recvWindow", RecvWindow, ParameterType.QueryString);
request.AddParameter("signature", GetSignature(request.Parameters), ParameterType.QueryString);
return Client.Get(request).Content;
}
private long GetTimestamp()
{
return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
}
private string …Run Code Online (Sandbox Code Playgroud)