Helpex - Trao đổi & giúp đỡ Đăng nhập
212

Tôi muốn tạo một hàm băm của I love cupcakes(được ký bằng khóa abcdeg)

Làm cách nào để tạo mã băm đó bằng Node.js Crypto?

212 hữu ích 0 bình luận 126k xem chia sẻ
383

Tài liệu về tiền điện tử: http://nodejs.org/api/crypto.html

const crypto = require('crypto')

const text = 'I love cupcakes'
const key = 'abcdeg'

crypto.createHmac('sha1', key)
  .update(text)
  .digest('hex')
383 hữu ích 3 bình luận chia sẻ
99

Một vài năm trước đây người ta nói rằng update()digest()là phương pháp di sản và cách tiếp cận trực tuyến API mới được giới thiệu. Bây giờ các tài liệu nói rằng có thể sử dụng một trong hai phương pháp. Ví dụ:

var crypto    = require('crypto');
var text      = 'I love cupcakes';
var secret    = 'abcdeg'; //make this your secret!!
var algorithm = 'sha1';   //consider using sha256
var hash, hmac;

// Method 1 - Writing to a stream
hmac = crypto.createHmac(algorithm, secret);    
hmac.write(text); // write in to the stream
hmac.end();       // can't read from the stream until you call end()
hash = hmac.read().toString('hex');    // read out hmac digest
console.log("Method 1: ", hash);

// Method 2 - Using update and digest:
hmac = crypto.createHmac(algorithm, secret);
hmac.update(text);
hash = hmac.digest('hex');
console.log("Method 2: ", hash);

Đã thử nghiệm trên nút v6.2.2 và v7.7.2

Xem https://nodejs.org/api/crypto.html#crypto_class_hmac . Cung cấp thêm ví dụ để sử dụng phương pháp truyền trực tuyến.

99 hữu ích 5 bình luận chia sẻ
22

Giải pháp của Gwerder sẽ không hoạt động vì hash = hmac.read();xảy ra trước khi quá trình phát trực tiếp được hoàn tất. Do đó các vấn đề của AngraX. Ngoài ra, hmac.writecâu lệnh là không cần thiết trong ví dụ này.

Thay vào đó, hãy làm điều này:

var crypto    = require('crypto');
var hmac;
var algorithm = 'sha1';
var key       = 'abcdeg';
var text      = 'I love cupcakes';
var hash;

hmac = crypto.createHmac(algorithm, key);

// readout format:
hmac.setEncoding('hex');
//or also commonly: hmac.setEncoding('base64');

// callback is attached as listener to stream's finish event:
hmac.end(text, function () {
    hash = hmac.read();
    //...do something with the hash...
});

Chính thức hơn, nếu bạn muốn, dòng

hmac.end(text, function () {

có thể được viết

hmac.end(text, 'utf8', function () {

bởi vì trong ví dụ này văn bản là một chuỗi utf

22 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript node.js algorithm hash node-crypto , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading