Crypto-js seems to be a nice collection of standard cryptographic algorithms for JavaScript. Implementing PwdHash clones should be now easier than ever :) Sample code using crypto-js uses PBKDF2 to hash a “Secret Passphrase” with randomly generated salt. Number of iterations is 500.
Progress: </div>
This is how it’s implemented:
<script type="text/javascript" src="files/ipsec/2.2.0-crypto-sha1-hmac-pbkdf2async.js"></script> <script type="text/javascript"> var salt = Crypto.util.bytesToHex(Crypto.util.randomBytes(16)); document.getElementById('salt').value = salt; function onCompleteHandler(result) { var key512bit1000 = result; document.getElementById('output').value = Crypto.util.bytesToBase64(Crypto.util.hexToBytes(result)); } function onProgressChangeHandler(percent) { document.getElementById('progress').innerHTML = percent + '%'; } var pass = document.getElementById('input').value; Crypto.PBKDF2Async(pass, salt, 64, onCompleteHandler, { iterations: 500, onProgressChange: onProgressChangeHandler }); </script>
Note that the example on crypto-js page uses bytesToString which seems to be no longer supported. I used bytesToHex instead.
Also have a look at Stanford SJCL.