6

Tôi hiện đang làm việc với tập lệnh Google Apps và đang cố viết & ký yêu cầu HTTP tới AWS CloudWatch.Đầu ra nhị phân từ Google Script HMAC kèm theo

Trên tài liệu API Amazon here về cách tạo khóa ký, họ sử dụng giả để giải thích rằng thuật toán HMAC là trả về định dạng nhị phân.

HMAC(key, data) represents an HMAC-SHA256 function 
that returns output in binary format. 

Google Apps Script cung cấp một phương pháp để làm một hash như vậy,

Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
              data, 
              key); 

nhưng kiểu trả về luôn là một mảng byte.

Byte[] 

Làm cách nào để chuyển đổi Byte [] thành dữ liệu nhị phân mà AWS muốn? Hoặc là có một chức năng javascript vanilla tôi có thể sử dụng trong Google Apps Script để tính toán băm?

Cảm ơn

+1

Bạn đã thử chuyển đổi thành chuỗi đầu tiên (từ Byte []) và sau đó, chuyển đổi nó thành nhị phân sẽ dễ dàng hơn? – Rpranata

+0

Có, tôi đã thử bằng cách chuyển đổi Byte [] thành một đốm màu và sau đó đọc dữ liệu dưới dạng chuỗi được chuyển vào lần lặp tiếp theo của băm, nhưng không có kết quả – user2495753

Trả lời

1

Việc quy đổi từ mảng byte để dữ liệu nhị phân cần phải được đơn giản:

kDate = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
      '20130618', 'AWS4' + kSecret); 
kDate = Utilities.newBlob(kDate).getDataAsString(); 
kRegion = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
      'eu-west-1', kDate); 

NHƯNG bạn phải nhìn vào this open issue in the bugtracker - có thể có một số vấn đề trong chuyển đổi.

có lẽ bạn có thể thử để làm cho một String.fromCharCode() vòng lặp và tránh numers tiêu cực:

kDateB = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
      '20130618', 'AWS4' + kSecret); 
kDate = ''; 
for (var i=0; i<kDateB.length; i++) 
    kDate += String.fromCharCode(kDateB[i]<0?256+kDateB[i]:0+kDateB[i]); 
kRegion = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, 
      'eu-west-1', kDate); 
+0

Cảm ơn bạn đã trả lời. Điều này chắc chắn là bực bội. Tôi đã đưa ra nhận xét về trình gỡ lỗi, vì vậy hy vọng điều này sẽ khiến nhóm Google ít nhất phản hồi và đưa ra bản cập nhật cho vấn đề đã biết này. – user2495753

+0

bạn đã thử tùy chọn ´String.fromCharCode' chưa? Vấn đề dường như xuất hiện với giá trị Byte âm. Thêm 256 vào những điều này sẽ giải quyết được vấn đề. – Taras

+0

Tôi đã cố gắng làm điều này và loại bỏ các giá trị âm bằng cách thêm 256, nhưng tiếc là tôi vẫn nhận được kết quả không chính xác. Google đã nói rằng đây là một vấn đề được biết và đang làm việc trên nó, nhưng họ cũng đã tuyên bố rằng không có bản cập nhật cho lỗi này tại thời điểm hiện tại. – user2495753

2

tôi khá chắc chắn rằng nó là một lỗi mà Utilities.computeHmacSignature mất chìa khóa như là một ASCII. Nhưng không có cách nào để phân tích byte [] để ASCII một cách chính xác trong GAS

Và tác giả thư viện là quá ngu ngốc quá chỉ cung cấp chức năng mà lấy chìa khóa như byte []

Vì vậy, tôi sử dụng này để thay thế: http://caligatio.github.com/jsSHA/

Chỉ cần sao chép SHA.js và SHA-256.js sau đó nó hoạt động tốt

PS. nó lãng phí thời gian của tôi cho toàn bộ 2 ngày vì vậy tôi rất khó chịu

Các vấn đề liên quan