Как правильно выполнить код БАСе
-
Здравствуйте.
Мне нужно сгенерировать определенное Значение, для передачи его в GET запросе(обращение по API) - назвем Signature.
Signature: an HMAC-SHA1 hash of your Access ID, the Expires parameter, and your Secret Key. The secure hash must be base64 encoded then URL-encoded before Mozscape accepts the signature as valid. - Это как описывается в инструкции. Есть код на джаваскрипте, который можно использовать. Полный код есть здесь https://github.com/seomoz/SEOmozAPISamples/blob/master/javascript/node/batching-urls-sample.js
Но приведу часть, чтобы кто-то объяснил что нужно делать :
'use strict';var crypto = require('crypto');
var http = require('http');
var expires = Math.floor((Date.now() / 1000)) + 300;
var accessId = process.env.accessId;
var secretKey = process.env.secretKey;
var cols = "68719476736";
var stringToSign = accessId + "\n" + expires;
var signature = crypto.createHmac('sha1', secretKey).update(stringToSign).digest('base64');
signature = encodeURIComponent(signature);Могу все реализовать с помощью стандартных блоков БАС, пока дело не доходит до программирования, так как не программист, и до этих блоков:
var signature = crypto.createHmac('sha1', secretKey).update(stringToSign).digest('base64');
signature = encodeURIComponent(signature);Пробовал вставить и в пользовательский код и в джаваскрипт но выбивают одни ошибки.
Я так понимаю, что закодировать в Base64 может и БАС, но вот что делать с hmac sha1 понятия не имею.Должен получится в конце такой запрос AccessID=member-cf180f7081&Expires=1225138899&Signature=LmXYcPqc%2BkapNKzHzYz2BI4SXfC%3D
Вот переменную Signature мне как-то нужно получить
Помогите, кто разбирается.
-
Тема закрыта, сделал все сам.
-
@seedgg Если кому-то будет интересно, вот пример работы с hmac sha1 на примере апи твиттера
-
Действительно, именно по этому примеру и сделал.
-
Помогите кто сделать так же, только с SHA256
При попытке подставить в код выше выдает ошибку
Chosen SHA variant is not supported
-
Вот модуль Sha256.zip
После этого стает доступна функция sha256, можно писать такsha256('Message to hash')
Софт, который превращает модули нпм в модули бас уже скоро.
-
@support а как ключ задать?
-
@DrPrime sha256 превращает строку в число или строку. Ключ нужен только если оно используется с другим алгоритмом, но их может быть много, вопрос каким именно?
-
@support hmac sha256
Думал это одно и то же
-
hmac sha256
Нет, не одно и то же нужно просто это либу подключить. https://www.npmjs.com/package/crypto-js
Чуть позже прийду сделаю модуль.
-
@DrPrime Вот подготовил модуль для crypto-js
0_1491991653382_CryptoJs.zip
Нужно его установить и выполнитьCryptoJS.HmacSHA256("Message", "Key")
Также эта либа поддерживает кучу других методов. https://www.npmjs.com/package/crypto-js
-
@support
Что то не то)
Выполняю следующий код[[DATA]] = "Hello" [[KEY]] = "qwerty123" [[SIGNATURE]] = CryptoJS.HmacSHA256([[DATA]], [[KEY]])
Получаю массив:
sigBytes: 32, words: [ -166834478, 1662242229, -1804389374, -898250840, -593942154, 85902484, 390772387, -1191507454
А хотел получить :
f60e4ed26313cdb594733402ca75c7a8dc992976051ec494174ab6a3b8fb0a02
взято с http://www.freeformatter.com/hmac-generator.html#ad-output
Как мне это привести к такому виду?
-
@DrPrime Хм, наверно toString нужно дописать
[[DATA]] = "Hello" [[KEY]] = "qwerty123" [[SIGNATURE]] = CryptoJS.HmacSHA256([[DATA]], [[KEY]]).toString()
-
@support said in Как правильно выполнить код БАСе:
[[SIGNATURE]] = CryptoJS.HmacSHA256([[DATA]], [[KEY]]).toString()
спасибо большое
Надеюсь этот модуль будет в следующем релизе, что бы не копировать его с папки в папку