ماژول crypto در نود جی اس قابلیتهای رمز نگاری را برای ما فراهم میآورد. این ماژول شامل مجموعه ای است که توابع هش openSSL، و ابزارهای دیگری همچون HMAC ، verify ، cipher ، decipher و sign را در بر میگیرد. در بخش اول توابع hash و HMAC را فرا میگیریم.
هشینگ به فرآیند محاسباتی تولید یک مقدار با طول ثابت (هش) گفته می شود. در طی فرآیند هشینگ، یک رشته توسط توابع ریاضی به هش تبدیل میشود که از آن در ایجاد امنیت استفاده میگردد.
هر هش تولید شده طی عمل هشینگ، ویژگیهایی دارد همچون:
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('md5'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node md5 hash : b95ed0bc44d12e3d6cb2ce8b15e1a41f
2. الگوریتم هشینگ Whirlpool: این الگوریتم هشینگ، ورودی با هر طولی کمتر از 2256 بیت میگیرد و یک هش 512-بیتی تولید میکند.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('whirlpool'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node whirlpool.js hash : 1d241d8e774492fcbab619d12f4e8ba82ca4327a97c0b955f97e9a8e99621be71 a3c9db8c5c55685dfd478ba1c091711534877efe249eee719d7d6132657a1dc
3. الگوریتم هشینگ SHA1: نام این تابع رمزنگاری از Secure Hash Algorithm 1 گرفته شده است. این تابع یک خروجی با طول 40 حرف از ارقام مبنای 16 تولید میکند. یک هش 160-بیتی که به خلاصه پیام شناخته میشود.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('sha1'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node sha1.js hash : 387d3143b0baa6beb292eda4f81b2d33e55c6744
4. الگوریتم هشینگ SHA224: از عبارت Secure Hash Algorithm 224 گرفته شده و تحت SHA2 اجرا شده است. این تابع یک خروجی 224-بیتی تولید میکند.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('sha224'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node sha224.js hash : a259323c32f8c38ccb97fcd3b407a1b51a8b7d9b16f672a8d6cbb2d6
5. الگوریتم هشینگ SHA256: این الگوریتم نیز، تحت SHA2 بوجود آمده است و برای تولید یک هش 256-بیتی (خلاصه پیام) استفاده میشود.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('sha256'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node sha256.js hash : 664ad54634c10149e324ffd83bd7b90badbffffcc5738c602b3e27cb7617737f
6. الگوریتم هشینگ SHA384: این الگوریتم هم تحت SHA2 بوجود میآید، خلاصه پیام آن هم یک هش 384-بیتی است.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('sha384'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node sha384.js hash : 13cd574a1025ab510115701cccbb23539d7144c45ffff3909e09413362fe1b83dad99cb143f5cb311cdeb4921ec6a33e
7. الگوریتم هشینگ SHA512: این الگوریتم هم تحت SHA2 ایجاد شده است و خروجی آن یک هش 512-بیتی است که به خلاصه پیام شناخته میشود.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('sha512'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی:
>node sha512.js hash : 45be99fad36ea7962165979444acbf558bd5c5837ae7389e3aebb48d41c6cf1aa44908d4dcd12db963f005f8d30e2e2cdda6b7499d7da0d0d46f356e5d1c e904
8. الگوریتم هشینگ ripemd-160: خلاصه RACE Integrity Primitives Evaluation Message Digest 160 است. نسخه بهبود یافته ای از ripemd که خروجی 40-رقمی مبنای 16 تولید میکند.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hash object var hash = crypto.createHash('ripemd160'); //passing the data to be hashed data = hash.update('nodejsera', 'utf-8'); //Creating the hash in the required format gen_hash= data.digest('hex'); //Printing the output on the console console.log("hash : " + gen_hash);
و خروجی آن:
>node ripemd.js hash : 6bbb8d56edec3a9e5add3d1439046982a91c7f47
هش کردن فایل: میخواهیم به کمک streams و filesystem در نود جی اس و الگوریتم رمز نگاری SHA256، محتوای یک فایل را هش کنیم.
//Loading the required modules in node.js var crypto = require('crypto'); var fs = require('fs'); //Algorithm to be used for HASH var algorithm = 'sha256'; //creating hash object var hash = crypto.createHash(algorithm); // reading the content of the file var filename = "data.txt"; var file_data = fs.ReadStream(filename); //passing the data to be hashed file_data.on('data', function(data) { hash.update(data) }) //Creating the hash in the required format and writing it in file file_data.on('end', function() { var gen_hash = hash.digest('hex') console.log('Hash generated using ' + algorithm + ' \nHashed output is : ' + gen_hash + ' \nFile name is : ' + filename); fs.writeFileSync(filename, gen_hash); })
نتیجه اجرای هشینک روی فایل:
>node hashing_a_file.js Hash generated using sha256 Hashed output is : da3811154d59c4267077ddd8bb768fa9b06399c486e1fc00485116b57c9872f5 File name is : data.txt
یکی از بزرگترین مسایلی که به هنگام استفاده از هشینگ با آن روبرو میشویم، جداولی هستند که به «جدول رنگین کمان» مشهورند و بصورت از پیش تعیین شده محاسبات رمزنگاری را درخود دارند و به منظور مقاصد شکستن رمز استفاده میشوند.
HMAC (یا keyd-hash message authentication code) نوعی Message Authentication Code یا MAC است که عمل هشینگ را به کمک یک کلید رمزنگاری انجام می دهد.
درست مثل هش، در HMAC هر خروجی هش که توسط الگوریتمهای هشینگ تولید می شود ویژگیهای زیر را داراست:
SHA256 HMAC: همانند الگوریتم هشینگ SHA256 است که در بالا توضیح دادیم، با این تفاوت که به کمک یک secret key انجام میشود:
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hmac object var hmac = crypto.createHmac('sha256', 'yoursecretkeyhere'); //passing the data to be hashed data = hmac.update('nodejsera'); //Creating the hmac in the required format gen_hmac= data.digest('hex'); //Printing the output on the console console.log("hmac : " + gen_hmac);
و خروجی آن :
>node hmac_sha256.js hmac : 89365e7dc5bde2be58737b7f6086275e4284506f00c74b5822b7b7afdb93a7a9
2. SHA512 HMAC: این الگوریتم هم همانند الگوریتم هشینگ SHA256 است که در بالا توضیح داده شد، منتها به کمک یک secret key هش را تولید میکند.
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hmac object var hmac = crypto.createHmac('sha512', 'yoursecretkeyhere'); //passing the data to be hashed data = hmac.update('nodejsera'); //Creating the hmac in the required format gen_hmac= data.digest('hex'); //Printing the output on the console console.log("hmac : " + gen_hmac);
و خروجی آن :
>node hmac_sha512.js hmac : a81b6b65c3df83ae15fe185dd16dc9c846f9e3cb567292422785954130047ac10e2547f505515ea4a20de7e335e60d6489ae71bbfcf130114672e95603dc 4571
3. md5 HMAC: این الگوریتم هم مشابه الگوریتم md5 است که قبلا توضیح دادیم و تفاوت آن هم مجددا در این است که secret key میگیرد:
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hmac object var hmac = crypto.createHmac('md5', 'yoursecretkeyhere'); //passing the data to be hashed data = hmac.update('nodejsera'); //Creating the hmac in the required format gen_hmac= data.digest('hex'); //Printing the output on the console console.log("hmac : " + gen_hmac);
و خروجی آن:
>node hmac_md5.js hmac : d79672cea8d7d6a61d40bd27373b0a30
4. Whirlpool HMAC: این هم شبیه الگوریتم هم نام خودش است که در بالا توضیح دادیم و باز هم با این تفاوت که secret key هم میگیرد:
//Loading the crypto module in node.js var crypto = require('crypto'); //creating hmac object var hmac = crypto.createHmac('whirlpool', 'yoursecretkeyhere'); //passing the data to be hashed data = hmac.update('nodejsera'); //Creating the hmac in the required format gen_hmac= data.digest('hex'); //Printing the output on the console console.log("hmac : " + gen_hmac);
و خروجی:
>node hmac_whirlpool.js hmac : c7fe72214a9830c397e7f01296f257a66d1aef002cea8ca7cf27fbd66e399d7ec52474bd2a0524f28955753ae93e9c2f55925584f6850f9f2829071ed218 d925
به طرق مشابه، میتوانید تمام الگوریتمهای هشینگ قبلی را ه همراه یک کلید رمزنگاری یا secret key، بهصورت HMAC استفاده کنید.
هش کردن یک فایل به کمک الگوریتم md5 HMAC: میخواهیم به کمک الگوریتم md5 از نوع HMAC و با استفاده از streams و filesystem در نود جی اس، محتوای یک فایل را رمزنگاری کنیم:
// Including the required modules var crypto = require('crypto'); var fs = require('fs'); //Algorithm to be used for HMAC var algorithm = 'md5'; //Secret to be used with HMAC var secret ='Rj2895647'; //creating hmac object var hmac = crypto.createHmac(algorithm, secret); // reading the content of the file var filename = "data.txt"; var file_data = fs.ReadStream(filename); //passing the data to be hashed file_data.on('data', function(data) { hmac.update(data) }) //Creating the hmac in the required format and writing it in file file_data.on('end', function() { var gen_hmac = hmac.digest('hex') console.log('Hmac generated using ' + algorithm + ' \nHashed output is : ' + gen_hmac + ' \nFile name is : ' + filename); fs.writeFileSync(filename, gen_hmac); })
و خروجی:
>node hmac_on_file.js Hmac generated using md5 Hashed output is : fe398f5177aa2a91a3a82d7b0f9e727a File name is : data.txt
در این روز از دوره 30 روزه با نود جی اس، استفاده از ماژول crypto را برای عملیات hash و HMAC فرا گرفتیم و به کمک قطعه کدهایی الگوریتمهای مختلفی همچون:
را بررسی کردیم. همچنین درمورد هش کردن محتوای فایل با استفاده از ماژول crypto در نود جی اس نکاتی آموختیم.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.