Dobre przykłady Stanford Javascript Crypto Library (Sjcl)? (Kryptografia JS) [zamknięta]

zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[3] } dla przepełnienia stosu.

Zamknięte 4 lata temu .

Popraw to pytanie

Szukam sposobu, aby wykonać kryptografię po stronie klienta w Javascript (zachowując http://www.matasano.com/articles/javascript-cryptography / w umyśle) i znalazły SJCL . Ale Wydaje mi się, że nie mogę znaleźć dobrych przykładów kodu. Jakieś wskazówki?

Author: Kevin Hakanson, 2013-05-25

2 answers

Zrobiłem prezentację w zeszłym roku zatytułowaną Developer ' s Guide to JavaScript and Web Cryptography i mam stronę demo online na https://jswebcrypto.azurewebsites.net/

Obejmuje to proste przykłady Hash, HMAC, PBKDF2 i AES dla wiersza poleceń OpenSSL (jako linię bazową) SJCL, CryptoJS, węzeł.js Crypto , a nawet W3C Web Cryptography API

Oto SJCL przykłady:

Hash

var out = sjcl.hash.sha1.hash("The quick brown fox jumps over the lazy dog");
var hash = sjcl.codec.hex.fromBits(out)
// "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"

HMAC

var key = sjcl.codec.utf8String.toBits("key");
var out = (new sjcl.misc.hmac(key, sjcl.hash.sha256)).mac("The quick brown fox jumps over the lazy dog");
var hmac = sjcl.codec.hex.fromBits(out)
// "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"

PBKDF2

var hmacSHA1 = function (key) {
    var hasher = new sjcl.misc.hmac( key, sjcl.hash.sha1 );
    this.encrypt = function () {
        return hasher.encrypt.apply( hasher, arguments );
    };
};

var passwordSalt = sjcl.codec.hex.toBits( "cf7488cd1e48e84990f51b3f121e161318ba2098aa6c993ded1012c955d5a3e8" );
var derivedKey = sjcl.misc.pbkdf2( "password", passwordSalt, 100, 256, hmacSHA1 );
var hexKey = sjcl.codec.hex.fromBits( derivedKey );
// c12b2e03a08f3f0d23f3c4429c248c275a728814053a093835e803bc8e695b4e

Uwaga : wymaga to włączenia sha1.js oprócz sjcl.js.

 44
Author: Kevin Hakanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-13 15:44:50

To może być trochę za późno, ale ja też ostatnio zastanawiałem się, jak wykonać haszowanie kryptograficzne po stronie klienta, a odpowiedź Kevina Hakansona była bardzo pomocna, strona demonstracyjna jest również bardzo przydatna! Pokazuje, jak używać niestandardowej Pseudorandomowej funkcji z PBKDF2( HMAC i SHA1), ale zorientowałem się, że jeśli jedna nie jest przekazywana, sjcl ma domyślne wartości i chciałem tylko pokazać, jak to zrobić, wraz z generowaniem losowej soli.

Znalazłem również dokumenty sjcl całkiem pomocne.

Aby wygenerować losową sól i użyć PBKDF2 na hasło "hasło", możesz to zrobić, co kończy się zaledwie 3 linijkami:

// Each random "word" is 4 bytes, so 8 would be 32 bytes
var saltBits = sjcl.random.randomWords(8);
// eg. [588300265, -1755622410, -533744668, 1408647727, -876578935, 12500664, 179736681, 1321878387]

// I left out the 5th argument, which defaults to HMAC which in turn defaults to use SHA256
var derivedKey = sjcl.misc.pbkdf2("password", saltBits, 1000, 256);
// eg. [-605875851, 757263041, -993332615, 465335420, 1306210159, -1270931768, -1185781663, -477369628]

// Storing the key is probably easier encoded and not as a bitArray
// I choose base64 just because the output is shorter, but you could use sjcl.codec.hex.fromBits
var key = sjcl.codec.base64.fromBits(derivedKey);
// eg. "2+MRdS0i6sHEyvJ5G7x0fE3bL2+0Px7IuVJoYeOL6uQ="

Jeśli chcesz przechowywać sól, prawdopodobnie chcesz ją zakodować

var salt = sjcl.codec.base64.fromBits(saltBits);
// eg. "IxC/6ZdbU/bgL7PkU/ZCL8vAd4kAvr64CraQaU7KQ3M="
// Again I just used base64 because it's shorter, but you could use hex

// And to get the bitArray back, you would do the exact opposite
var saltBits = sjcl.codec.base64.toBits(salt);
 16
Author: janka102,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:55