encrypt decrypt data ใน node.js

การเข้ารหัส (encrypt) และถอดรหัส (decrypt) ข้อมูลใน Node.js สามารถทำได้โดยใช้โมดูล crypto ซึ่งมาพร้อมกับ Node.js ตามนี้เป็นตัวอย่างของวิธีการใช้งาน:

  1. นำเข้าโมดูล crypto:

    ในโค้ดของคุณ ให้เริ่มต้นโดยการนำเข้าโมดูล crypto ด้วยคำสั่ง require:

    1
    const crypto = require('crypto');
  2. การเข้ารหัสข้อมูล (Encryption):

    เพื่อเข้ารหัสข้อมูลใช้ฟังก์ชัน crypto.createCipheriv() เพื่อสร้างวัตถุ Cipher และหลังจากนั้นใช้ update() และ final() เพื่อเข้ารหัสข้อมูล:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const algorithm = 'aes-256-cbc'; // เลือกขั้นตอนการเข้ารหัสที่ต้องการ
    const key = crypto.randomBytes(32); // สร้างกุญแจเริ่มต้น (ควรเก็บในสถานที่ปลอดภัย)
    const iv = crypto.randomBytes(16); // สร้าง IV (Initialization Vector) เริ่มต้น (ควรเก็บในสถานที่ปลอดภัย)

    const cipher = crypto.createCipheriv(algorithm, key, iv);

    let encryptedData = cipher.update('ข้อมูลที่จะเข้ารหัส', 'utf8', 'hex');
    encryptedData += cipher.final('hex');

    console.log('ข้อมูลที่เข้ารหัส:', encryptedData);
    • algorithm คือ ขั้นตอนการเข้ารหัสที่คุณต้องการใช้ (เช่น 'aes-256-cbc')
    • key คือ กุญแจเริ่มต้นที่ใช้ในการเข้ารหัส (ควรเก็บในสถานที่ปลอดภัย)
    • iv (Initialization Vector) ใช้ในขั้นตอนการเข้ารหัสเพื่อเพิ่มความปลอดภัย (ควรเก็บในสถานที่ปลอดภัย)
  3. การถอดรหัสข้อมูล (Decryption):

    เพื่อถอดรหัสข้อมูลใช้ฟังก์ชัน crypto.createDecipheriv() เพื่อสร้างวัตถุ Decipher และหลังจากนั้นใช้ update() และ final() เพื่อถอดรหัสข้อมูล:

    1
    2
    3
    4
    5
    6
    const decipher = crypto.createDecipheriv(algorithm, key, iv);

    let decryptedData = decipher.update(encryptedData, 'hex', 'utf8');
    decryptedData += decipher.final('utf8');

    console.log('ข้อมูลที่ถอดรหัส:', decryptedData);
    • ในตัวอย่างนี้ encryptedData คือข้อมูลที่เข้ารหัสแล้ว (ที่คุณได้จากขั้นตอนการเข้ารหัส)
  4. การจัดการข้อผิดพลาด:

    ควรใส่การจัดการข้อผิดพลาดเมื่อมีปัญหาในขั้นตอนการเข้ารหัสหรือถอดรหัส โดยรับข้อผิดพลาดที่เกิดขึ้นในรูปแบบของ try...catch:

    1
    2
    3
    4
    5
    try {
    // ขั้นตอนการเข้ารหัสหรือถอดรหัส
    } catch (error) {
    console.error('เกิดข้อผิดพลาด:', error);
    }

โปรดทราบว่าเวลาที่คุณใช้ crypto.randomBytes() เพื่อสร้างกุญแจและ IV ควรจะเก็บค่าเหล่านี้ในสถานที่ปลอดภัยเนื่องจากจะใช้ในการถอดรหัสข้อมูลในภายหลัง และคุณควรใช้กุญแจที่แข็งแกร่งมากเท่าที่จะเป็นไปได้สำหรับการเข้ารหัสและถอดรหัสข้อมูลที่มีความสำคัญ.