HMAC sha256 nodejs

Thể hiện HMAC-SHA256. Cũng chứng minh HMAC-SHA1 và HMAC-MD5

var os = require('os');
if (os.platform() == 'win32') {  
    if (os.arch() == 'ia32') {
        var chilkat = require('@chilkat/ck-node17-win-ia32');
    } else {
        var chilkat = require('@chilkat/ck-node17-win64'); 
    }
} else if (os.platform() == 'linux') {
    if (os.arch() == 'arm') {
        var chilkat = require('@chilkat/ck-node17-arm');
    } else if (os.arch() == 'x86') {
        var chilkat = require('@chilkat/ck-node17-linux32');
    } else {
        var chilkat = require('@chilkat/ck-node17-linux64');
    }
} else if (os.platform() == 'darwin') {
    var chilkat = require('@chilkat/ck-node17-macosx');
}

function chilkatExample() {

    // This example assumes Chilkat Crypt2 to have been previously unlocked.
    // See Unlock Crypt2 for sample code.

    // Demonstrates how to reproduce the following results found at
    // https://en.wikipedia.org/wiki/Hash-based_message_authentication_code

    // HMAC_SHA256("key", "The quick brown fox jumps over the lazy dog") = 0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
    // HMAC_MD5("key", "The quick brown fox jumps over the lazy dog")    = 0x80070713463e7749b90c2dc24911e275
    // HMAC_SHA1("key", "The quick brown fox jumps over the lazy dog")   = 0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

    var crypt = new chilkat.Crypt2();

    crypt.MacAlgorithm = "hmac";
    crypt.EncodingMode = "hex";
    crypt.SetMacKeyString("key");
    var sData = "The quick brown fox jumps over the lazy dog";

    crypt.HashAlgorithm = "SHA-256";
    console.log("HMAC_SHA256: " + crypt.MacStringENC(sData));

    crypt.HashAlgorithm = "MD5";
    console.log("HMAC_MD5: " + crypt.MacStringENC(sData));

    crypt.HashAlgorithm = "SHA-1";
    console.log("HMAC_SHA1: " + crypt.MacStringENC(sData));

    // The output is the same (ignore case)
    // HMAC_SHA256: F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8
    // HMAC_MD5: 80070713463E7749B90C2DC24911E275
    // HMAC_SHA1: DE7C9B85B8B78AA6BC8A7A36F70A90701C9DB4D9

}

chilkatExample();

[TL;DR] Tôi sẽ dễ dàng giới thiệu các khái niệm MAC và HMAC và cung cấp mã mẫu JavaScript rất đơn giản mà thậm chí bạn sẽ có thể sử dụng trong bảng điều khiển trình duyệt của mình

MAC là viết tắt của Mã xác thực tin nhắn và nó còn được gọi là thẻ và trong giao tiếp đôi khi được thay thế bằng MIC hoặc mã toàn vẹn tin nhắn

MAC để làm gì?

Theo quan điểm chung, MAC là một phần thông tin bảo vệ thông báo bằng cách

  • xác minh tính toàn vẹn của dữ liệu, tôi. e. rằng tin nhắn đã không bị giả mạo
  • xác minh tính xác thực của nó, xác nhận rằng nó đến từ người gửi đã nêu

Điều này đặc biệt quan trọng khi tin nhắn phải đi qua các kênh không an toàn. Các trường hợp sử dụng cụ thể sẽ được liệt kê dưới đây

MAC hoạt động như thế nào?
  1. Người gửi A muốn gửi tin nhắn M đến người nhận B
  2. Người gửi A và người nhận B chia sẻ khóa K
  3. Người gửi sử dụng thuật toán ký S để tính thẻ T với khóa chia sẻ K và thông báo M
  4. Người nhận B sử dụng thuật toán xác minh V để xác minh tính xác thực của thông báo M với khóa K và thẻ T. Nghĩa là, thuật toán trả về được chấp nhận nếu cả thẻ T và thông báo M đều không bị giả mạo. Nếu không, nó trả về bị từ chối
Yêu cầu đối với mã xác thực tin nhắn an toàn

Nó phải chống lại nỗ lực giả mạo thẻ của đối thủ cho các thông báo tùy ý, được chọn hoặc tất cả, kể cả trong các điều kiện của thông báo đã biết hoặc đã chọn. Tức là phải chống được việc giả mạo chữ ký số

Sẽ không khả thi về mặt tính toán để tính toán một thẻ hợp lệ của thông báo đã cho mà không biết khóa

HMAC

HMAC (mã xác thực tin nhắn dựa trên hàm băm) là một loại mã xác thực tin nhắn (MAC) cụ thể. Như với bất kỳ MAC nào, hàm băm có thể được sử dụng để xác minh tính toàn vẹn của dữ liệu và xác thực thông báo

Tên hàm băm được sử dụng để gọi các hàm MAC khác nhau có mẫu HMAC-X, ví dụ HMAC-SHA256 hoặc HMAC-SHA3–512

ví dụ JavaScript

Mở công cụ phát triển trình duyệt của bạn để thử các đoạn mã sau trên bảng điều khiển. Các đoạn mã này cũng sẽ hoạt động với Node. js

Chức năng này thực hiện phiên bản HMAC-SHA256

async function hmacSha256Hex(secret, message) {
const enc = new TextEncoder("utf-8");
const algorithm = { name: "HMAC", hash: "SHA-256" };
const key = await crypto.subtle.importKey(
"raw",
enc.encode(secret),
algorithm,
false, ["sign", "verify"]
);
const hashBuffer = await crypto.subtle.sign(
algorithm.name,
key,
enc.encode(message)
);
const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map(
b => b.toString(16).padStart(2, '0')
).join('');
return hashHex;
}

Sử dụng chức năng này đơn giản như sau

await hmacSha256Hex(
"key",
"The quick brown fox jumps over the lazy dog"
);
//f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

Trong ví dụ trước, ánh xạ tới giải thích MAC, chúng ta có khóa K có giá trị “key”, thông báo M có giá trị “The quick brown fox jumps over the lazy dog” và thẻ T có giá trị “f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8”

Kịch bản sử dụng cho HMAC

Vì vậy, đến bây giờ, bạn nên hiểu cách thức hoạt động của HMAC — nếu không, vui lòng cho tôi biết trong phần nhận xét, phần nào khó hiểu để tôi có thể cải thiện nó. Bạn có thể thắc mắc đâu là kịch bản cụ thể cho công nghệ này. Chà, đây là một vài trong số chúng sẽ giúp bạn khi bạn đối mặt với những thử thách khác nhau