Преглед изворни кода

Create paswword salt/hash on frontend.

Lee Morgan пре 1 година
родитељ
комит
fc15e85151
3 измењених фајлова са 48 додато и 4 уклоњено
  1. 1 1
      src/views/css/index.css
  2. 37 0
      src/views/js/encryptPassword.js
  3. 10 3
      src/views/js/pages/Register.js

+ 1 - 1
src/views/css/index.css

@@ -60,7 +60,7 @@ body{
 
 .standardForm input{
     font-size: 22px;
-    padding-left: 10px;
+    padding: 5px 0 5px 10px;
 }
 
 .standardForm button{

+ 37 - 0
src/views/js/encryptPassword.js

@@ -0,0 +1,37 @@
+let generateSalt = ()=>{
+    const length = 16;
+    const salt = new Uint8Array(length);
+    crypto.getRandomValues(salt);
+    return btoa(String.fromCharCode(...salt));
+}
+
+export default async (password) =>{
+    const salt = generateSalt();
+    const iterations = 100000;
+    const hash = "SHA-256";
+    const encoder = new TextEncoder();
+
+    const baseKey = await crypto.subtle.importKey(
+        "raw",
+        encoder.encode(password),
+        {name: "PBKDF2"},
+        false,
+        ["deriveBits"]
+    );
+
+    const derivedBits = await crypto.subtle.deriveBits(
+        {
+            name: "PBKDF2",
+            salt: encoder.encode(salt),
+            iterations,
+            hash
+        },
+        baseKey,
+        256
+    );
+
+    return {
+        hash: btoa(String.fromCharCode(...new Uint8Array(derivedBits))),
+        salt: salt
+    };
+}

+ 10 - 3
src/views/js/pages/Register.js

@@ -1,5 +1,6 @@
 import Page from "./Page.js";
 import Elem from "../Elem.js";
+import encryptPassword from "../encryptPassword.js";
 
 export default class Register extends Page{
     constructor(){
@@ -8,15 +9,21 @@ export default class Register extends Page{
         this.render();
     }
 
-    submit(){
+    async submit(){
         event.preventDefault();
-        console.log("submitting");
+
+        let name = this.container.querySelector(".name").value;
+        let email = this.container.querySelector(".email").value;
+        let password = this.container.querySelector(".password").value;
+        let confirmPassword = this.container.querySelector(".confirmPassword").value;
+
+        console.log(await saltAndHash(password));
     }
 
     render(){
         new Elem("form")
             .addClass("standardForm")
-            .onsubmit(this.submit)
+            .onsubmit(()=>{this.submit()})
             .append(new Elem("h1")
                 .text("Register")
             )