6

मैं वर्तमान में Google Apps स्क्रिप्ट के साथ काम कर रहा हूं और & लिखने का प्रयास कर रहा हूं AWS क्लाउडवॉच पर HTTP अनुरोध पर हस्ताक्षर करें।Google स्क्रिप्ट एचएमएसी एनक्रिप्शन से बाइनरी आउटपुट

अमेज़ॅन एपीआई दस्तावेज here पर हस्ताक्षर कुंजी बनाने के तरीके के बारे में, वे यह समझाने के लिए छद्म का उपयोग करते हैं कि एचएमएसी एल्गोरिदम बाइनरी प्रारूप को वापस करना है।

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

गूगल, स्क्रिप्ट इस तरह के एक हैश करने के लिए एक विधि प्रदान करता एप्लिकेशन

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

लेकिन वापसी प्रकार हमेशा एक बाइट सरणी है।

Byte[] 

मैं बाइट [] बाइनरी डेटा AWS में कैसे परिवर्तित करूं? या हैश की गणना करने के लिए Google Apps स्क्रिप्ट में मैं एक वेनिला जावास्क्रिप्ट फ़ंक्शन का उपयोग कर सकता हूं?

धन्यवाद

+1

क्या आपने पहले स्ट्रिंग में परिवर्तित करने की कोशिश की है (बाइट [] से) और फिर, इसे बाइनरी में परिवर्तित करना आसान होगा? – Rpranata

+0

हां मैंने कोशिश की है कि बाइट [] को एक ब्लॉब में परिवर्तित करके और फिर डेटा को हैशिंग के अगले पुनरावृत्ति में पारित करने के लिए स्ट्रिंग के रूप में पढ़ना, लेकिन – user2495753

उत्तर

1

आवश्यक सरल होना चाहिए बाइनरी डेटा को बाइट सरणी से रूपांतरण:

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); 

लेकिन आप this open issue in the bugtracker पर देखने के लिए है - रूपांतरण में कुछ मुद्दों पर हो सकता है।

हो सकता है आप एक String.fromCharCode() पाश बनाने के लिए और नकारात्मक numers से बचने की कोशिश कर सकते हैं:

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

का कोई फायदा नहीं हुआ। यह निश्चित रूप से निराशाजनक है। मैंने बगट्रैकर पर एक टिप्पणी की, इसलिए उम्मीद है कि यह कम से कम प्रतिक्रिया देने और इस ज्ञात मुद्दे को अपडेट करने के लिए Google टीम प्राप्त करेगी। – user2495753

+0

क्या आपने'String.fromCharCode' विकल्प को आजमाया था? समस्या नकारात्मक बाइट मानों के साथ प्रकट होती प्रतीत होती है। इन्हें 256 जोड़ना समस्या को हल करना चाहिए। – Taras

+0

मैंने ऐसा करने का प्रयास किया और 256 जोड़कर नकारात्मक मूल्यों से छुटकारा पा लिया, लेकिन दुर्भाग्यवश मुझे अभी भी गलत परिणाम मिल रहा है। Google ने कहा है कि यह एक ज्ञात मुद्दा है और इस पर काम कर रहा है, लेकिन उन्होंने यह भी कहा है कि वर्तमान समय में इस बग के लिए कोई अपडेट नहीं है। – user2495753

2

मैं इसे एक बग कि Utilities.computeHmacSignature एक ASCII के रूप में चाबी ले काफी यकीन है। http://caligatio.github.com/jsSHA/

: लेकिन वहाँ बाइट [] गैस

में सही ढंग से करने के लिए ASCII और पुस्तकालय लेखक भी बस []

तो मैं इस के बजाय का उपयोग समारोह जो बाइट के रूप में चाबी ले प्रदान भी बेवकूफ है पार्स करने के लिए कोई रास्ता नहीं था

बस SHA.js और SHA-256.js की प्रतिलिपि बनाएँ, तो यह ठीक काम करता है

पीएस। यह पूरे 2 दिनों के लिए अपना समय बर्बाद कर देता है इसलिए मैं बहुत परेशान हूं

संबंधित मुद्दे