Giter Club home page Giter Club logo

Comments (9)

dchest avatar dchest commented on August 16, 2024

fast-sha256-js принимает Uint8Array, а не строки. У вас получается, например, соль: ["s", "a", "l", "t"], которая внутри при конвертации в числа станет [NaN, NaN, NaN, NaN].

Нужна функция, которая сконвертирует строку в байты, например:

function decodeUTF8(s) {
  var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);
  for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);
  return b;
}

далее:

// Output is Uint8Array
...
var key2     = sha256.pbkdf2(decodeUTF8(password), decodeUTF8(salt), iterations, len);

и получаем:

Asmcrypto: 632c2812e46d4604102ba7618e9d6d7d2f8128f6
DmitryChe: 632c2812e46d4604102ba7618e9d6d7d2f8128f6

from fast-sha256-js.

sergeevabc avatar sergeevabc commented on August 16, 2024

Спасибо за конвертацию, Дмитрий. Наверное, были причины сделать Uint8Array на входе, а у меня после знакомства с другими библиотеками по инерции ожидание строки для пароля и соли .

P.S. Добавление спустя 11 дней изучения темы: да, принимать Uint8Array на входе это разумно.

from fast-sha256-js.

dchest avatar dchest commented on August 16, 2024

@sergeevabc раньше, когда не было typed arrays, каждый маленький компонентик включал в себя конвертацию байтов туда-сюда. Представьте, что каждый компонент, например AES, SHA256, ZIP, PNG и т.п., который вы используете в каком-нибудь большом проекте, содержит UTF8-to-bytes и bytes-to-UTF8 — сколько ненужного кода, возможно, содержащего баги. Теперь, когда в браузерах появилась нормальная работа с байтами через ArrayBuffer / Uint8Array, принято работать только с ними, а остальные операции, такие как по конвертации, отдать специальной библиотеке, которая будет сфокусирована именно на конвертации.

from fast-sha256-js.

sergeevabc avatar sergeevabc commented on August 16, 2024

Замеры ASMCrypto vs SJCL vs DmitryChe Fast-SHA256-JS при вычислении PBKDF2 HMAC SHA256.

from fast-sha256-js.

dchest avatar dchest commented on August 16, 2024

@sergeevabc спасибо, познавательно. Я рад, что мои 270 строчек кода не так далеки от unrolled, inlined версии в Chrome :)

Насколько я понимаю, ASMCrypto — самое быстрое что есть? (хочу ссылку поставить с fast-sha256-js)

from fast-sha256-js.

vibornoff avatar vibornoff commented on August 16, 2024

О да, самое быстрое, но только в FF.
Да, всем привет.

from fast-sha256-js.

sergeevabc avatar sergeevabc commented on August 16, 2024

Библиотека SJCL проверена временем и её приятно использовать «из коробки», т.к.

  • в неё вшиты необходимые конвертации вроде UTF8 на входе и HEX на выходе,
  • параметром подключается другой хэш, скажем, незаслуженно забытый HMAC-RIPEMD160,
  • для новичков очевиднее битность результата, т.е. хочешь 256, пишешь 256, а не 32, держа в уме умножение на 8.

Да, ASMCrypto слегка опережает Fast-SHA256-JS по тесту, но при этом весит 175 Кб в minified версии, что, на мой взгляд, перебор, и нет простой возможности вычленить нужное (а именно PBKDF2 HMAC SHA256 для создания современного генератора паролей от мастерключа и соли).

from fast-sha256-js.

vibornoff avatar vibornoff commented on August 16, 2024

Касательно RIPEMD160 — он устарел примерно 5 лет назад. Воздержитесь по возможности от его использования в новых разработках.

Что же до автоконвертации UTF8 — я решил от нее отказаться (за подробностями asmcrypto/asmcrypto.js#60).

Собрать asmcrypto.js только с PBKDF2-HMAC-SHA256 очень просто:

$ grunt --with pbkdf2-hmac-sha256

Получается 40 kB.

Если у Вас есть идеи, как можно улучшить asmcrypto — велкам ко мне в https://github.com/vibornoff/asmcrypto.js/

from fast-sha256-js.

dchest avatar dchest commented on August 16, 2024

@vibornoff 👍

from fast-sha256-js.

Related Issues (7)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.