Comments (9)
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.
Спасибо за конвертацию, Дмитрий. Наверное, были причины сделать Uint8Array
на входе, а у меня после знакомства с другими библиотеками по инерции ожидание строки для пароля и соли .
P.S. Добавление спустя 11 дней изучения темы: да, принимать Uint8Array на входе это разумно.
from fast-sha256-js.
@sergeevabc раньше, когда не было typed arrays, каждый маленький компонентик включал в себя конвертацию байтов туда-сюда. Представьте, что каждый компонент, например AES, SHA256, ZIP, PNG и т.п., который вы используете в каком-нибудь большом проекте, содержит UTF8-to-bytes и bytes-to-UTF8 — сколько ненужного кода, возможно, содержащего баги. Теперь, когда в браузерах появилась нормальная работа с байтами через ArrayBuffer / Uint8Array, принято работать только с ними, а остальные операции, такие как по конвертации, отдать специальной библиотеке, которая будет сфокусирована именно на конвертации.
from fast-sha256-js.
Замеры ASMCrypto vs SJCL vs DmitryChe Fast-SHA256-JS при вычислении PBKDF2 HMAC SHA256.
from fast-sha256-js.
@sergeevabc спасибо, познавательно. Я рад, что мои 270 строчек кода не так далеки от unrolled, inlined версии в Chrome :)
Насколько я понимаю, ASMCrypto — самое быстрое что есть? (хочу ссылку поставить с fast-sha256-js)
from fast-sha256-js.
О да, самое быстрое, но только в FF.
Да, всем привет.
from fast-sha256-js.
Библиотека SJCL проверена временем и её приятно использовать «из коробки», т.к.
- в неё вшиты необходимые конвертации вроде UTF8 на входе и HEX на выходе,
- параметром подключается другой хэш, скажем, незаслуженно забытый HMAC-RIPEMD160,
- для новичков очевиднее битность результата, т.е. хочешь 256, пишешь 256, а не 32, держа в уме умножение на 8.
Да, ASMCrypto слегка опережает Fast-SHA256-JS по тесту, но при этом весит 175 Кб в minified версии, что, на мой взгляд, перебор, и нет простой возможности вычленить нужное (а именно PBKDF2 HMAC SHA256 для создания современного генератора паролей от мастерключа и соли).
from fast-sha256-js.
Касательно 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.
from fast-sha256-js.
Related Issues (7)
- Suggestion: input type check HOT 2
- nacl.util link points to tweetnacl-js which is no longer the home for that HOT 1
- Same result on Chromium-based browsers HOT 1
- sha256.hmac return garbled hash value HOT 9
- PKBDF2 Doesn't appear to generate exepcted values HOT 3
- pbkdf2 gives always the same result HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fast-sha256-js.