Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >penyulitan dan penyahsulitan penggunaan nodejs

penyulitan dan penyahsulitan penggunaan nodejs

WBOY
WBOYasal
2023-05-14 11:52:072289semak imbas

Dalam aplikasi Internet moden, keselamatan data dan kerahsiaan adalah penting. Untuk melindungi data sensitif, pembangun sering menggunakan kaedah penyulitan dan penyahsulitan untuk memastikan data tersebut dilindungi daripada capaian yang tidak dibenarkan semasa penghantaran dan penyimpanan. Kaedah penyulitan dan penyahsulitan juga amat diperlukan dalam projek Node.js, terutamanya apabila menggunakan aplikasi.

Artikel ini akan memperkenalkan cara menggunakan Node.js untuk penyulitan dan penyahsulitan, dan cara menggunakan kaedah ini untuk melindungi keselamatan dan kerahsiaan data semasa menggunakan aplikasi.

1. Penyulitan dan penyahsulitan

Dalam Node.js, kaedah penyulitan dan penyahsulitan yang biasa digunakan ialah menggunakan modul kripto. Modul ini menyediakan banyak API untuk melaksanakan pelbagai algoritma penyulitan dan penyahsulitan seperti AES, RSA, Hmac, dll.

1.Penyulitan dan penyahsulitan AES

AES (Standard Penyulitan Lanjutan) ialah algoritma penyulitan simetri yang digunakan secara meluas yang digunakan untuk menyulitkan dan menyahsulit data. Dalam Node.js, data boleh disulitkan dan dinyahsulit AES menggunakan kaedah createCipheriv dan createDecipheriv modul crypto.

Berikut ialah contoh penyulitan dan penyahsulitan menggunakan AES:

const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
const text = 'Hello World';

// 加密
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
console.log(encrypted);

// 解密
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
console.log(decrypted);

Dalam contoh ini, rentetan "Hello World" disulitkan dan dinyahsulit menggunakan algoritma AES-256-CBC. Mula-mula, jana kunci 32-bit dan 16-bit IV (Vektor Permulaan) dengan memanggil kaedah crypto.randomBytes. Cipta objek sifir menggunakan kaedah createCipheriv, menghantar kekunci dan IV sebagai parameter. Kemudian, gunakan kaedah kemas kini untuk menghantar data yang akan disulitkan kepada objek penyulitan, dan tetapkan format pengekodan data input kepada 'utf8' dan format pengekodan data output kepada 'hex'. Akhir sekali, panggil kaedah terakhir untuk mendapatkan data yang disulitkan.

Proses penyahsulitan adalah serupa dengan proses penyulitan. Cipta objek penyahsulitan menggunakan kaedah createDecipheriv dan hantar kekunci dan IV yang sama kepadanya. Kemudian, gunakan kaedah kemas kini untuk menghantar data yang disulitkan ke objek penyahsulit dan tetapkan format pengekodan data input dan output. Akhirnya, kaedah terakhir dipanggil untuk menyahsulit data dan mengeluarkan data asal.

2. Penyulitan dan penyahsulitan RSA

RSA (Rivest–Shamir–Adleman) ialah algoritma penyulitan asimetri yang boleh digunakan untuk menyulitkan dan menyahsulit data. Dalam Node.js, anda boleh melakukan penyulitan RSA dan penyahsulitan data menggunakan kaedah publicEncrypt dan privateDecrypt modul crypto.

Berikut ialah contoh penyulitan dan penyahsulitan menggunakan RSA:

const crypto = require('crypto');
const fs = require('fs');
const publicKey = fs.readFileSync('public.pem');
const privateKey = fs.readFileSync('private.pem');
const text = 'Hello World';

// 加密
const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(text));
console.log(encrypted.toString('base64'));

// 解密
const decrypted = crypto.privateDecrypt(privateKey, encrypted);
console.log(decrypted.toString());

Dalam contoh ini, rentetan "Hello World" disulitkan dan dinyahsulit menggunakan algoritma RSA. Mula-mula, baca kunci awam dan peribadi daripada fail. Gunakan kaedah publicEncrypt untuk menyulitkan data dan menukar data yang disulitkan kepada pengekodan base64. Akhir sekali, gunakan kaedah privateDecrypt untuk menyahsulit data dan mengeluarkan data asal.

3.Penyulitan Hmac

HMAC (Kod pengesahan mesej berasaskan cincang) ialah kod pengesahan mesej berasaskan cincang yang digunakan untuk mengesahkan integriti data. Dalam Node.js, nilai Hmac boleh dijana menggunakan kaedah createHmac modul crypto.

Berikut ialah contoh penyulitan dan penyahsulitan menggunakan Hmac:

const crypto = require('crypto');
const secret = 'mysecret';
const text = 'Hello World';

// 加密
const hmac = crypto.createHmac('sha256', secret);
hmac.update(text);
const encrypted = hmac.digest('hex');
console.log(encrypted);

// 解密
const hmac2 = crypto.createHmac('sha256', secret);
hmac2.update(text);
const decrypted = hmac2.digest('hex');
console.log(decrypted);

Dalam contoh ini, rentetan "Hello World" disulitkan dan dinyahsulit menggunakan algoritma HMAC. Mula-mula, cipta objek HMAC menggunakan kaedah createHmac dan mulakan ia menggunakan algoritma 'sha256' dan kunci rahsia (di sini 'mysecret'). Gunakan kaedah kemas kini untuk menghantar data yang akan disulitkan ke objek HMAC dan gunakan kaedah ringkasan untuk mendapatkan data yang disulitkan.

Proses penyahsulitan adalah serupa dengan proses penyulitan. Cipta objek HMAC lain menggunakan kaedah createHmac dan mulakannya dengan algoritma dan kunci yang sama. Gunakan kaedah kemas kini untuk menghantar data yang akan dinyahsulit kepada objek, dan gunakan kaedah ringkasan untuk mendapatkan data yang dinyahsulit.

2. Gunakan aplikasi

Apabila menggunakan aplikasi Node.js, keselamatan dan kerahsiaan data mesti diambil kira. Berikut ialah beberapa cadangan untuk membantu anda memastikan aplikasi anda kekal selamat semasa ia digunakan dan dijalankan.

1. Gunakan HTTPS

Menggunakan protokol HTTPS untuk melindungi penghantaran data ialah langkah penting dalam mengekalkan keselamatan dan kerahsiaan data. HTTPS memastikan bahawa data tidak didengari atau diusik semasa penghantaran. Untuk menggunakan HTTPS, gunakan modul HTTPS dalam kod aplikasi anda dan konfigurasikan sijil SSL untuk pelayan.

Berikut ialah contoh mencipta pelayan SSL menggunakan modul HTTPS:

const https = require('https');
const fs = require('fs');
const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Hello World');
}).listen(443);

Dalam contoh ini, pelayan SSL dibuat menggunakan modul HTTPS dan sijil dibaca daripada sistem fail menggunakan modul dan kunci fs. Cipta objek pelayan menggunakan kaedah createServer dan berikan objek pilihan dan fungsi panggil balik sebagai parameter. Dalam fungsi panggil balik, tetapkan pengepala respons HTTP dan keluarkan kandungan mesej. Panggil kaedah dengar dan nyatakan port yang ingin didengari oleh pelayan (di sini ialah 443).

2. Menggunakan pembolehubah persekitaran

Adalah tidak selamat untuk mengekod maklumat sensitif (seperti kata laluan, kunci, dll.) dalam kod aplikasi. Adalah lebih baik untuk menyimpan maklumat ini dalam pembolehubah persekitaran dan merujuknya dalam kod anda. Menggunakan pembolehubah persekitaran menghalang maklumat ini daripada bocor secara tidak sengaja apabila aplikasi anda digunakan.

Berikut ialah contoh penggunaan modul dotenv untuk memuatkan fail konfigurasi daripada pembolehubah persekitaran:

require('dotenv').config();
console.log(process.env.DB_USERNAME);
console.log(process.env.DB_PASSWORD);

Dalam contoh ini, modul dotenv digunakan untuk memuatkan fail .env yang mengandungi sensitif maklumat seperti nama pengguna pangkalan data dan kata laluan). Gunakan objek process.env untuk merujuk pembolehubah ini dan mencetak nilainya.

3. Gunakan parameter baris arahan

使用命令行参数传递敏感信息也是一种安全的方法。在应用程序启动时,通过命令行参数将敏感信息传递给应用程序。

以下是一个使用yargs模块解析命令行参数的示例:

const yargs = require('yargs');
const argv = yargs
  .option('username', {
    alias: 'u',
    description: 'Database username',
    type: 'string',
    required: true
  })
  .option('password', {
    alias: 'p',
    description: 'Database password',
    type: 'string',
    required: true
  })
  .help()
  .alias('help', 'h')
  .argv;

console.log(argv.username);
console.log(argv.password);

在此示例中,使用yargs模块解析命令行参数,并使用option方法定义要解析的参数。使用help方法显示帮助信息。使用alias方法为选项定义别名。在回调函数中,使用argv对象访问命令行参数。

结论

在Node.js项目中,加密和解密方法是确保数据安全和保密性的关键因素之一。使用crypto模块可以使用各种加密和解密算法,如AES、RSA、Hmac等。在部署应用程序时,必须考虑到数据的安全和保密性。使用HTTPS协议保护数据传输,使用环境变量或命令行参数存储敏感信息,可以帮助您确保应用程序在部署和运行过程中保持安全。

Atas ialah kandungan terperinci penyulitan dan penyahsulitan penggunaan nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn