Squeak.ru - шаблоны программирования

Как я могу закодировать строку в base64, используя метеор

Я пытаюсь использовать форму для загрузки файлов в корзину s3 с помощью Meteor. Я читаю эту статью на Amazon. В конце «Подпишите форму S3 POST» мне нужно закодировать строку в base64, но я не смог найти способ сделать это. Кто-нибудь может сказать мне, как это сделать? Обратите внимание, что строку сначала нужно закодировать, а затем подписать. Вот как это делается в питоне:

import base64
import hmac, hashlib

policy = base64.b64encode(policy_document)
signature = base64.b64encode(hmac.new(AWS_SECRET_ACCESS_KEY, policy, hashlib.sha1).digest())
27.08.2013

Ответы:


1

Для выполнения этих задач вам понадобится криптомодуль NodeJS.

Сначала создайте каталог «packages» в корне вашего проекта метеора, затем создайте каталог «my-package». Внутри него вам понадобятся два файла: «package.js» и «my-package.js».

package.js должен выглядеть так:

Package.describe({
    summary:"MyPackage doing amazing stuff with AWS."
});


Package.on_use(function(api){
    // add your package file to the server app
    api.add_files("my-package.js","server");
    // what we export outside of the package
    // (this is important : packages have their own scope !)
    api.export("MyPackage","server");
});

my-package.js должен выглядеть так:

var crypto=Npm.require("crypto");

MyPackage={
    myFunction:function(arguments){
        // here you can use crypto functions !
    }
};

Возможно, вам понадобится функция crypto.createHmac. Вот пример кода того, как я кодирую политику безопасности JSON в base64, а затем использую ее для создания подписи безопасности в своем собственном приложении:

encodePolicy:function(jsonPolicy){
    // stringify the policy, store it in a NodeJS Buffer object
    var buffer=new Buffer(JSON.stringify(jsonPolicy));
    // convert it to base64
    var policy=buffer.toString("base64");
    // replace "/" and "+" so that it is URL-safe.
    return policy.replace(/\//g,"_").replace(/\+/g,"-");
},
encodeSignature:function(policy){
    var hmac=crypto.createHmac("sha256",APP_SECRET);
    hmac.update(policy);
    return hmac.digest("hex");
}

Это позволит вам вызывать MyPackage.myFunction на стороне сервера вашего приложения Meteor. И последнее, но не последнее: не забудьте «метеор добавить мой пакет», чтобы использовать его!

27.08.2013
  • Работает, но действительно перегружен, если ваша единственная задача - кодировать/декодировать base64 24.10.2015

  • 2

    Вы можете сделать это без криптомодуля NodeJS, создание пакета выглядело для меня немного как разбить муху на колесе, поэтому я понял это:

    if (Meteor.isServer) {
      Meteor.methods({
        'base64Encode':function(unencoded) {
          return new Buffer(unencoded || '').toString('base64');
        },
        'base64Decode':function(encoded) {
          return new Buffer(encoded || '', 'base64').toString('utf8');
        },
        'base64UrlEncode':function(unencoded) {
          var encoded = Meteor.call('base64Encode',unencoded);
          return encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
        },
        'base64UrlDecode':function(encoded) {
          encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
          while (encoded.length % 4)
            encoded += '=';
          return Meteor.call('base64Decode',encoded);
        }
        console.log(Meteor.call('base64Encode','abc'));
    });
    

    Это основано на base64.js Джона Херлимана, найденном по адресу https://gist.github.com/jhurliman/1250118 Обратите внимание, что это будет работать как шарм на сервере, но для переноса его на клиент вы должны вызывать методы с функцией обратного вызова, которая сохраняет результат как переменную сеанса.

    31.08.2013
  • Этот победитель! 07.10.2015

  • 3

    Вы можете использовать пакет meteor-crypto-base64.

    CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse('Hello, World!'));
    //"SGVsbG8sIFdvcmxkIQ=="
    
    10.09.2014
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...