Как правильно выполнить код БАСе



  • Здравствуйте.
    Мне нужно сгенерировать определенное Значение, для передачи его в 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 мне как-то нужно получить

    Помогите, кто разбирается.



  • Тема закрыта, сделал все сам.


  • administrators

    @seedgg Если кому-то будет интересно, вот пример работы с hmac sha1 на примере апи твиттера

    http://bablosoft.com/uploads/twitterapi.xml



  • Действительно, именно по этому примеру и сделал.



  • Помогите кто сделать так же, только с SHA256
    При попытке подставить в код выше выдает ошибку
    Chosen SHA variant is not supported


  • administrators

    @DrPrime

    Вот модуль Sha256.zip
    После этого стает доступна функция sha256, можно писать так

    sha256('Message to hash')
    

    Софт, который превращает модули нпм в модули бас уже скоро.



  • @support а как ключ задать?


  • administrators

    @DrPrime sha256 превращает строку в число или строку. Ключ нужен только если оно используется с другим алгоритмом, но их может быть много, вопрос каким именно?



  • @support hmac sha256
    Думал это одно и то же


  • administrators

    @DrPrime

    hmac sha256

    Нет, не одно и то же нужно просто это либу подключить. https://www.npmjs.com/package/crypto-js
    Чуть позже прийду сделаю модуль.


  • administrators

    @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

    Как мне это привести к такому виду?


  • administrators

    @DrPrime Хм, наверно toString нужно дописать

    [[DATA]] = "Hello"
    [[KEY]] = "qwerty123"
    [[SIGNATURE]] = CryptoJS.HmacSHA256([[DATA]], [[KEY]]).toString()
    


  • @support said in Как правильно выполнить код БАСе:

    [[SIGNATURE]] = CryptoJS.HmacSHA256([[DATA]], [[KEY]]).toString()

    спасибо большое
    Надеюсь этот модуль будет в следующем релизе, что бы не копировать его с папки в папку


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.