ماژول رمزنگاری Node.js فرآیند انجام عملیات رمزنگاری را ساده می کند. در اینجا نحوه استفاده از آن آورده شده است.
رمزنگاری عمل ایمن سازی ارتباطات و داده ها با تبدیل آنها به قالب هایی است که فقط اشخاص مجاز می توانند رمزگشایی کنند.
ماژول رمزنگاری Node.js یک ماژول داخلی است که عملکرد رمزنگاری را برای برنامه های Node.js فراهم می کند. طیف وسیعی از قابلیت های رمزنگاری، از جمله رمزگذاری، رمزگشایی، هش کردن، امضای دیجیتال، تولید اعداد تصادفی امن و غیره را ارائه می دهد.
در اینجا برنامه های مختلف ماژول رمزنگاری Node.js و نحوه استفاده از آنها برای ایمن سازی برنامه های خود را بررسی خواهید کرد.
هش کردن
هش کردن یک تکنیک رمزنگاری یک طرفه است که می توانید از آن برای تبدیل یک کلید یا رشته معین به یک خروجی با اندازه ثابت به نام هش یا خلاصه استفاده کنید.
هش کردن یک تابع یک طرفه است به این معنی که وقتی یک کلید یا رشته را هش می کنید، نمی توانید مقدار اصلی را از هش تولید شده دریافت کنید.
ماژول رمزنگاری Node.js از توابع مختلف هش مانند SHA-256، SHA-512، MD5 و غیره پشتیبانی می کند.
می توانید داده ها را با استفاده از متد createHash ماژول رمزنگاری که الگوریتم هش را به عنوان آرگومان می گیرد، هش کنید. این روش یک شی Hash را برمیگرداند که میتوانید از آن برای هش کردن دادهها با استفاده از روشهای بهروزرسانی و خلاصه استفاده کنید.
مثلا:
const crypto = require('crypto');
const data = "password";
// creating hash object
const hashAlgo = crypto.createHash('sha256')
// passing the data to be hashed
hashAlgo.update(data);
// Creating the hash in the required format
const hash = hashAlgo.digest('hex');
console.log(`Hash: ${hash}`);
در مثال بالا، createHash ماژول کریپتو یک شی هش با الگوریتم هش sha256 ایجاد کرد. متد به روز رسانی در شی هش داده های ورودی را می گیرد و آن را هش می کند. سپس متد digest یک پارامتر رمزگذاری را می گیرد و فرمت مقدار هش خروجی را مشخص می کند و هش را در قالب مشخص شده (هگز) برمی گرداند.
هش برای تایید یکپارچگی داده ها، ذخیره سازی رمز عبور، امضای دیجیتال و موارد دیگر مفید است.
تولید داده های تصادفی
دادههای تصادفی امن رمزنگاری اغلب در رمزنگاری، بازیها و آزمایشها برای موارد استفاده مختلف مورد نیاز است.
در رمزنگاری، میتوانید از دادههای تصادفی برای تولید کلیدها، نمکها و بردارهای اولیه برای الگوریتمهای رمزگذاری و رمزگشایی استفاده کنید.
در بازی، میتوانید از دادههای تصادفی برای تولید سطوح بازی، شخصیتها، آیتمها و موارد دیگر استفاده کنید تا از تقلب جلوگیری کنید و مطمئن شوید که بازی قابل پیشبینی نیست.
در آزمایش، می توانید از آن برای شبیه سازی سناریوهای دنیای واقعی و موارد لبه استفاده کنید.
میتوانید دادههای تصادفی را با استفاده از روش تصادفی بایتهای ماژول رمزنگاری Node.js تولید کنید. این متد یک عدد را به عنوان آرگومان می گیرد و بافری از بایت های تصادفی را برمی گرداند.
این عدد نشان دهنده اندازه بایت هایی است که روش تولید می کند. با این حال، عدد نباید بزرگتر از 2³¹ – 1 (2147483647) باشد، که حداکثر مقداری است که می توان با یک عدد صحیح علامتدار 32 بیتی نشان داد.
مثلا:
const crypto = require("crypto");
// create random bytes
const randomBytes = crypto.randomBytes(32);
// convert to hex
const randomString = randomBytes.toString("hex");
console.log(randomString); //logs random string to the console
بلوک کد بالا یک رشته تصادفی از 64 کاراکتر هگزا دسیمال (32 بایت) را تولید و در کنسول ثبت می کند.
تولید دادههای تصادفی امن از نظر رمزنگاری مهم است زیرا تضمین میکند که دادههای تصادفی قابل پیشبینی نیستند و مهاجمان نمیتوانند آنها را دستکاری یا حدس بزنند.
رمزگذاری و رمزگشایی در Node.js
رمزگذاری فرآیند تبدیل متن ساده به شکل غیرقابل خواندن (متن رمز) با استفاده از یک الگوریتم رمزگذاری و یک کلید مخفی است.
رمزگشایی معکوس رمزگذاری است. این فرآیند تبدیل متن رمز به متن ساده با استفاده از همان الگوریتم رمزگذاری و کلید است.
ماژول رمزنگاری Node.js از الگوریتمهای رمزگذاری و رمزگشایی مختلف، از جمله AES (استاندارد رمزگذاری پیشرفته)، DES (استاندارد رمزگذاری دادهها) و RSA (Rivest–Shamir–Adleman) پشتیبانی میکند.
نحوه رمزگذاری داده ها در Node.js با استفاده از ماژول رمزنگاری
شما می توانید داده ها را با استفاده از متد crypto.createCipheriv() رمزگذاری کنید که الگوریتم رمزگذاری، کلید مخفی و یک بردار اولیه را به عنوان ورودی می گیرد. کلید مخفی به الگوریتم رمزگذاری که استفاده می کنید بستگی دارد. به عنوان مثال، برای الگوریتم aes-256 در حالت CBC، طول کلید باید 32 بایت باشد.
این متد یک شی Cipher را برمی گرداند که می توانید از آن برای رمزگذاری داده ها با استفاده از متدهای update() و final() استفاده کنید. داده های رمزگذاری شده معمولاً به عنوان یک رشته هگزادسیمال یا یک بافر نمایش داده می شوند.
مثلا:
const crypto = require("crypto");
// Generate a secret key for encryption and decryption.
const secretKey = crypto.randomBytes(32);
// Generate an initialization vector
const iv = crypto.randomBytes(16);
// data to be encrypted
const plainText = "This is a secret message";
// create cipher object
const cipher = crypto.createCipheriv("aes-256-cbc", secretKey, iv);
// encrypt the data
let encryptedText = cipher.update(plainText, "utf-8", "hex");
// finalize the encryption
encryptedText += cipher.final("hex");
console.log(encryptedText);
مثال بالا نشان می دهد که چگونه می توانید متن ساده را با استفاده از aes-256 در حالت CBC با استفاده از ماژول رمزنگاری رمزگذاری کنید. این یک کلید مخفی و یک بردار اولیه را با استفاده از روش crypto.randomBytes تولید می کند. سپس یک شی رمز با استفاده از روش crypto.createCipheriv ایجاد می کند و پیام متنی ساده را با استفاده از روش های cipher.update و cipher.final رمزگذاری می کند.
نتیجه یک رشته هگزادسیمال از پیام رمزگذاری شده است که می توانید با استفاده از همان کلید مخفی و IV رمزگشایی کنید.
نحوه رمزگشایی داده ها در Node.js با استفاده از ماژول رمزنگاری
میتوانید دادههای رمزگذاریشده را با استفاده از روش crypto.createDecipheriv() ماژول کریپتو رمزگشایی کنید، که الگوریتم رمزگشایی، کلید مخفی و یک بردار اولیه را به عنوان ورودی میگیرد. این متد یک شی Decipher را برمی گرداند که می توانید از آن برای رمزگشایی داده ها با استفاده از متدهای Decipher.update() و Decipher.final() استفاده کنید.
مثلا:
// create Decipher object
const decipher = crypto.createDecipheriv("aes-256-cbc", secretKey, iv);
// decrypt the data
let decryptedText = decipher.update(encryptedText, "hex", "utf-8");
// finalize the decryption
decryptedText += decipher.final("utf-8");
console.log(decryptedText); // This is a secret message
مثال بالا نشان می دهد که چگونه می توانید داده های رمزگذاری شده را با استفاده از همان الگوریتم، کلید مخفی و بردار اولیه سازی که آنها را با آن رمزگذاری کرده اید رمزگشایی کنید.
با استفاده از روش crypto.createDecipheriv یک شی Decipher ایجاد می کند. سپس داده ها را با استفاده از روش decipher.update رمزگشایی می کند، که داده ها، رمزگذاری ورودی و رمزگذاری خروجی را به عنوان آرگومان می گیرد. در نهایت فرآیند رمزگشایی را با استفاده از روش decipher.final به پایان می رساند. فراخوانی این روش تضمین می کند که شی Decipher می تواند مدت بیشتری برای رمزگشایی داده ها استفاده شود. نتیجه یک رشته متن ساده است.
رمزگذاری و رمزگشایی برای محافظت از داده های حساس و حفظ محرمانه بودن آنها بسیار مهم است. آنها برنامه های کاربردی مختلفی در دنیای واقعی در تجارت الکترونیک، بانکداری آنلاین، ذخیره سازی داده ها و غیره دارند.
سایر برنامه های ماژول رمزنگاری Node.js
علاوه بر هش کردن، تولید دادههای تصادفی امن رمزنگاری، و رمزگذاری و رمزگشایی، میتوانید از ماژول رمزنگاری Node.js برای امضا و تأیید امضاهای دیجیتال استفاده کنید که به تأیید صحت و یکپارچگی اسناد دیجیتال کمک میکند. علاوه بر این، میتوانید از ماژول کریپتو برای ایمنسازی جریانها برای انتقال دادهها استفاده کنید تا از دستکاری دادهها و استراق سمع در حین انتقال جلوگیری کنید.