Я пытаюсь перенести 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==
Очень хотелось бы получить точку в правильном направлении, обойти кругами длядни и не уверен, где именно я иду не так.Благодарю.