| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>WebCrypto API Demo: PBKDF2</title> |
| <style> |
| .inner |
| { |
| display: inline-block; |
| } |
| </style> |
| <script type="text/javascript" src="common.js"></script> |
| <script type="text/javascript"> |
| function PBKDF2() |
| { |
| var rawKey = document.getElementById("password").value; |
| |
| crypto.subtle.importKey("raw", asciiToUint8Array(rawKey), "PBKDF2", false, ["deriveBits"]).then(function(baseKey) { |
| return crypto.subtle.deriveBits({name: "PBKDF2", salt: crypto.getRandomValues(new Uint8Array(16)), iterations: 100000, hash: "sha-256"}, baseKey, 128); |
| }, failAndLog).then(function(result) { |
| document.getElementById("derivedKey").innerHTML = bytesToHexString(result); |
| }, failAndLog); |
| } |
| </script> |
| </head> |
| <body> |
| <h1>PBKDF2</h1> |
| <p>Click the following button multiple times to see how random salts can strengthen password hashes.</p> |
| <div> |
| Password: <input type="text" id="password" value="123456789"> |
| <button type="button" onclick="PBKDF2()" class="inner">derive</button> |
| <div id="derivedKey" class="inner"></div> |
| </div> |
| </body> |
| </html> |