Неправильный результат в кодировке Hmac SHA256 Base64 в Rust по сравнению с подходом JS - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь перенести API шифрования с JavaScript на Rust.Версия JavaScript аутентифицируется и подключается.Полезная нагрузка и секретный ключ подписываются с использованием Hmac Sha256 и кодируются в Base64.Ниже приведена рабочая реализация в JavaScript.

var param = "test";
var privateKey = "secret";
var signature = crypto.createHmac('sha256', new Buffer(privateKey, 'utf8'))
    .update(param)
    .digest('base64');

Возвращает следующую подпись: Aymga2LNFrM+tnkr6MYLFY2Jou46h2/Omogeu0iMCRQ=

В Rust я использую Hmac SHA256 и кодирую результат обратно в Base64, пока я не 'Я не смог подобраться к ожидаемой подписи.Вот моя лучшая 2-дневная попытка сделать это:

extern crate ring;
extern crate data_encoding;
extern crate hex;

use ring::{digest, hmac};
use data_encoding::BASE64;
use hex::encode as hex_encode;

fn main() {
    let secret_key = "secret";
    let payload = "test";
    let signed_key = hmac::SigningKey::new(&digest::SHA256, secret_key.as_bytes());
    let signature = hex_encode(hmac::sign(&signed_key, payload.as_bytes()).as_ref());
    let b64_encoded_sig = BASE64.encode(signature.as_ref());
    assert_eq!(b64_encoded_sig, "Aymga2LNFrM+tnkr6MYLFY2Jou46h2/Omogeu0iMCRQ=");
}

Это возвращает следующую подпись: MDMyOWEwNmI2MmNkMTZiMzNlYjY3OTJiZThjNjBiMTU4ZDg5YTJlZTNhODc2ZmNlOWE4ODFlYmI0ODhjMDkxNA==

Очень хотелось бы получить точку в правильном направлении, обойти кругами длядни и не уверен, где именно я иду не так.Благодарю.

1 Ответ

0 голосов
/ 19 октября 2018

Просто убери шестнадцатеричную вещь

extern crate ring;
extern crate data_encoding;

use ring::{digest, hmac};
use data_encoding::BASE64;

fn main() {
    let secret_key = "secret";
    let payload = "test";
    let signed_key = hmac::SigningKey::new(&digest::SHA256, secret_key.as_bytes());
    let signature = hmac::sign(&signed_key, payload.as_bytes());
    let b64_encoded_sig = BASE64.encode(signature.as_ref());
    assert_eq!(b64_encoded_sig, "Aymga2LNFrM+tnkr6MYLFY2Jou46h2/Omogeu0iMCRQ=");
}
...