Hướng dẫn javascript hmac-sha1 - javascript hmac-sha1

Mặc dù tất cả các mã mẫu để ký và xác minh các thuật toán băm, tôi vẫn có thử nghiệm và điều chỉnh khá nhiều để làm cho nó hoạt động. Đây là mẫu làm việc của tôi mà tôi tin rằng tất cả các trường hợp cạnh được bảo hiểm.

Đó là URL an toàn (tức là không cần phải được mã hóa), phải mất thời gian hết hạn và sẽ không bất ngờ ném một ngoại lệ. Có một sự phụ thuộc vào day.js, nhưng bạn có thể thay thế nó bằng một thư viện ngày khác hoặc cuộn so sánh ngày của riêng bạn.

Được viết bằng TypeScript:

// signature.ts
import * as crypto from 'crypto';
import * as dayjs from 'dayjs';

const key = 'some-random-key-1234567890';

const replaceAll = (
  str: string,
  searchValue: string,
  replaceValue: string,
) => str.split(searchValue).join(replaceValue);

const swap = (str: string, input: string, output: string) => {
  for (let i = 0; i < input.length; i++)
    str = replaceAll(str, input[i], output[i]);

  return str;
};

const createBase64Hmac = (message: string, expiresAt: Date) =>
  swap(
    crypto
      .createHmac('sha1', key)
      .update(`${expiresAt.getTime()}${message}`)
      .digest('hex'),
    '+=/', // Used to avoid characters that aren't safe in URLs
    '-_,',
  );

export const sign = (message: string, expiresAt: Date) =>
  `${expiresAt.getTime()}-${createBase64Hmac(message, expiresAt)}`;

export const verify = (message: string, hash: string) => {
  const matches = hash.match(/(.+?)-(.+)/);
  if (!matches) return false;

  const expires = matches[1];
  const hmac = matches[2];

  if (!/^\d+$/.test(expires)) return false;

  const expiresAt = dayjs(parseInt(expires, 10));
  if (expiresAt.isBefore(dayjs())) return false;

  const expectedHmac = createBase64Hmac(message, expiresAt.toDate());
  // Byte lengths must equal, otherwise crypto.timingSafeEqual will throw an exception
  if (hmac.length !== expectedHmac.length) return false;

  return crypto.timingSafeEqual(
    Buffer.from(hmac),
    Buffer.from(expectedHmac),
  );
};

Bạn có thể sử dụng nó như thế này:

import { sign, verify } from './signature';

const message = 'foo-bar';
const expiresAt = dayjs().add(1, 'day').toDate();
const hash = sign(message, expiresAt);

const result = verify(message, hash);

expect(result).toBe(true);
Hướng dẫn nodejs thay đổi thư mục làm việc

Quay trở lại homepagefind ra cách phục vụ trang `index.html` html bằng Node.js không có sự phụ thuộc nào có vấn đề này với tập lệnh Node.js tôi đã viết. Tôi đã đặt các đường dẫn tương đối để tham khảo ...

Hướng dẫn hứa nodejs

Promise.race ([Bluetuktuk, Greenmotobike, RedTractor]) - HÌNH MINH HọA CủA KEN WONGCHờI, THờI NÀY AI XÀI Hứa Nữa. Chuẩn Bây Giờ Là Async/Await. - Ai Đó Triệu Mạnghãy ...

Hướng dẫn nodejs crypto

Mô -đun Crypto Node.js Hỗ Trợ Mật MÃ. Nó cung cấp chức năng mật mà bao

Hướng dẫn dùng bcrpt trong php

Cập NHật ngÀy 27/12/2021nội Dung Chínhso SánH 2 Chuỗi Đạo MÃ Hoá?

Hướng dẫn phụ trong python

Nội phân chính nội phân Chính c go

Hướng dẫn nhận thư mục đường dẫn javascript

Tôi đang cố gắng để có được vị trí thư mục của một tệp và tôi không biết làm thế nào để có được nó. Tôi dường như không thể tìm thấy một mô -đun cho phép tôi làm điều này. Ví dụ, nói rằng tôi có cái này ...

Hướng dẫn mysql truy vấn nodejs

Lào việc với mysql gồm kết nối, chèn/cậ

Đường dẫn hướng dẫn tham gia nodejs

Nội phân bài viếtvideo học lập trình mỗi ngÀynode.js Cung cấp Một Module path NHằm mục Đích x Tất nhiênn là hiệu suất mang thời gian ...

Hướng dẫn swagger nodejs

ChÀo Các bạn, Hôm Nay Mình Sẽ Giới Thiệu Với Các Bạn Một Công cụ Khá Là

Hướng dẫn dùng ném JavaScript

Thử & bắt cú pháp Về bản chất chún ta tạo ra 2 khối mã. Đoạn ĐầU Tin Là NHững mã Mà ...

Hướng dẫn giáio trình nodejs

BÀI VIếT MớI # NODE.JS Cơ BảN BÀI 17: MODULE Hó

Hướng dẫn bộ đệm nodejs

NHÓM Phát Triển Của Chún tôma vừa ra mắt Trang web Langlearning.net Học tiếng ah Là ...

Hướng dẫn nodejs MongoDb

Trong bài viết nào chr ể ệ tìm hiểu lÀm thế nào để sử dụng MongoDB với nodejs. MongoDB là một noQuery, hiểu suất cao rất nổi tiếng, nó được xây dựng ...

Hướng dẫn dùng bcrypt băm php

Cập NHật ngÀy 27/12/2021TRONG PHP, MUốN Sử DụNG MÃ HOÁ BCRYPT TA Sẽ HÀm nÀy thường Dùng Để MÃ HOÁ

Nodejs mysql chèn nhiều hàng

Khi được hỏi 10 năm, 7 tháng đã xem xét 202k lần chèn số lượng lớn bằng cách sử dụng mảng lồng nhau, xem các mảng được phân loại của github được chuyển thành các danh sách được nhóm (để chèn số lượng lớn), ví dụ: [[A, B], ...

Hướng dẫn dùng asych javascript

Trong một thời gian rất dài Kết quả lÀ, rất nhiều người trong ...

Hướng dẫn dùng sql thoát trong php

Ở BÀi trước Mình Đạo Gi, đó

Hướng dẫn dùng exmascript javascript

NHÓM Phát Triển Của Chún tôma vừa ra mắt Trang web Langlearning.net Học tiếng ah Là ...

Hướng dẫn nodejs MongoDb

Trong bài viết nào chr ể ệ tìm hiểu lÀm thế nào để sử dụng MongoDB với nodejs. MongoDB là một noQuery, hiểu suất cao rất nổi tiếng, nó được xây dựng ...

Hướng dẫn dùng bcrypt băm php

Cập NHật ngÀy 27/12/2021TRONG PHP, MUốN Sử DụNG MÃ HOÁ BCRYPT TA Sẽ HÀm nÀy thường Dùng Để MÃ HOÁ

Nodejs mysql chèn nhiều hàng

Khi được hỏi 10 năm, 7 tháng đã xem xét 202k lần chèn số lượng lớn bằng cách sử dụng mảng lồng nhau, xem các mảng được phân loại của github được chuyển thành các danh sách được nhóm (để chèn số lượng lớn), ví dụ: [[A, B], ...

Hướng dẫn res.render nodejs

Series NodeJS căn bản cho người mới bắt đầuỞ bài trước, các bạn đã có thể dùng hàm send() để trả về một mã HTML khi client gửi requestapp.get(/, ...

Hướng dẫn thanh toán online nodejs

Cho mình hỏi cách tích hợp thanh toán online như Ngân Lượng, Bảo Kim, VTC pay...vào webiste với ạ (nodejs+express+mongodb...)This topic has been deleted. Only users with topic ...

Hướng dẫn dùng assingment trong PHP

Nội dung chính2. Toán tử số học (Arithmetic Operator) trong PHP2. Toán tử gán (Assignment Operator) trong PHP3. Toán tử so sánh (Comparison Operator) trong PHP4. Các toán tử ...

Hướng dẫn dùng res render python

Tôi đang gặp một số khó khăn khi giải mã sự không rõ ràng giữares.render(viewname, {msg: Message }) vàres.redirect(route) Chức năng chuyển hướng không cho phép ...

Hướng dẫn dùng datatrue JavaScript

Tại thời điểm mình viết bài này, hầu như khi nhắc đến ajax là các bạn lại nghĩ ngay đến jquery và các bạn cũng thường biết jquery được phát triển ...

Hướng dẫn dùng socket address trong PHP

TechblogDevelopmentSocket IO là 1 thuật ngữ không còn quá xa lạ đối với các lập trình viên chuyên nghiệp. Nó được xem là 1 công cụ để thực hiện việc kết ...

Hướng dẫn dùng brcypt trong PHP

Cập nhật ngày 27/12/2021Trong PHP, muốn sử dụng mã hoá Bcrypt ta sẽ dùng hàm password_hash(). Hàm này thường dùng để mã hoá mật khẩu.Ngoài mã hoá Bcrypt hàm này ...

Hướng dẫn dùng http remote_user trong PHP

It is possible to use the header() function to send an Authentication Required message to the client browser causing it to pop up a Username/Password input window. Once the user has filled in a ...