แนะนำ module bcryptjs ของ javascript


ในการเขียนโปรแกรมบางครั้งเราต้องการเข้ารหัสข้อมูล  คือแปลงข้อมูลเดิมให้เป็นอีกข้อมูลหนึ่ง  ถ้าอยาก
ให้กลับเป็นข้อมูลเดิมก็ถอดรหัสกลับ   แต่ในที่นี่เราจะแนะนำ module ที่ช่วยให้เราแปลงข้อมูลแบบทางเดียว 
คือไม่สามารถถอดรหัสกลับมาเป็นข้อมูลเดิมได้  แล้วแบบนี้จะมีประโยชน์ย่างไร  กรณีที่เราต้องการเก็บข้อมูล
รหัสผ่านของผู้ใช้งานเว็บไซต์  module นี้จะมีประโยชน์มากเพราะสามารถเข้ารหัสแบบทางเดียวได้และสามารถ
พิสูจน์ข้อมูลได้ว่าก่อนเข้ารหัสเป็นข้อมูลเดียวกันหรือเรียกว่าทำการ compare ได้นั่นเอง เช่น ตั้งรหัสผ่านเป็น
a1234 เมื่อเข้ารหัสด้วย bcryptjs จะได้ข้อมูลใหม่เป็น as#+ab โดยข้อมูลใหม่นี้ถ้านำรหัสอื่นมา compare จะได้
ค่าออกมาเป็น false ต้องเป็นรหัสที่ถูกต้องเท่านั้นอย่าง a1234 จึงจะได้ผลลัพธ์ออกมาเป็น true

ตัวอย่างการใช้งาน

const bcrypt = require('bcryptjs');
let salt = bcrypt.genSaltSync(10); //
let hash = bcrypt.hashSync("a1234", salt);

bcrypt.compareSync("a1234", hash); // true
bcrypt.compareSync("not_bacon", hash); // false

จากตัวอย่างโด้ดด้านบนมีการกำหนดให้ genSaltSync(10)  เพื่อป้องกันการ rainbow table attacks ซึ่ง
เป็นวิธีหนึ่งในการเจาะรหัสผ่าน   ข้อมูลที่ได้หลังจากการเข้ารหัสจะถูกเรียกว่า hash ถ้าทำระบบฐานข้อมูลผู้ใช้
งานที่เป็น username password ให้นำ password มาเข้ารหัสเป็น hash ก่อนแล้วค่อยเก็บลงฐานข้อมูล   ส่วน
กรณีผู้ใช้งานลงชื่อเข้าใช้ให้นำรหัสที่ผู้ใช้งานกรอกมา compare กับ hash ว่าได้ผลลัพธ์เป็น true หรือไม่  ถ้าได้
ture ก็ให้ผ่านเข้ามาได้  

แหล่งที่มา

ความคิดเห็น