hash - node.js হ্যাশ স্ট্রিং?




(6)

আমি একটি স্ট্রিং যে আমি হ্যাশ করতে চান। Node.js এ হ্যাশ জেনারেট করার সবচেয়ে সহজ উপায় কী?

হ্যাশ সংস্করণ নয়, নিরাপত্তা নয়।


আপনি যদি md5 হ্যাশের একটি সাধারণ স্ট্রিং দেখতে চান তবে এটি আমার জন্য এটি কাজ করে।

var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de

আমি blueimp-md5 ব্যবহার করি যা "সার্ভার-পার্শ্ব এনভায়রনমেন্টের সাথে সামঞ্জস্যপূর্ণ, যেমন নোড.জেএস, মডিউল লোডারস, ওয়ার্কজেএস, ব্রাউজারিফি বা ওয়েবপ্যাক এবং সমস্ত ওয়েব ব্রাউজার।"

এটি ভালো ব্যবহার করুন:

var md5 = require("blueimp-md5");

var myHashedString = createHash('GreensterRox');

createHash(myString){
    return md5(myString);
}

যদি খোলাখুলিভাবে প্রায়শই মূল্যবোধের পার্থক্য উত্তোলন করা হয় তবে এটি সর্বদা তাদের লবণাক্ত করার একটি ভাল ধারণা যা মানুষকে তাদের পুনরুজ্জীবিত করা কঠিন।

createHash(myString){
    var salt = 'HnasBzbxH9';
    return md5(myString+salt);
}

crypto.createHash(algorithm) . crypto.createHash(algorithm) এ দেখুন।

var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');

var md5sum = crypto.createHash('md5');

var s = fs.ReadStream(filename);
s.on('data', function(d) {
  md5sum.update(d);
});

s.on('end', function() {
  var d = md5sum.digest('hex');
  console.log(d + '  ' + filename);
});

http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/ থেকে সংক্ষিপ্ত চিন্তাভাবনা বিবেচনা http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/ (সংক্ষিপ্তভাবে: প্রথম এনক্রিপ্ট করুন, তারপর প্রমাণ করুন। পরে যাচাই করুন, তারপর ডিক্রিপ্ট করুন) আমি নডে নিম্নলিখিত সমাধান বাস্তবায়ন করেছি। JS:

function encrypt(text,password){
  var cipher = crypto.createCipher(algorithm,password)
  var crypted = cipher.update(text,'utf8','hex')
  crypted += cipher.final('hex');
  return crypted;
}

function decrypt(text,password){
  var decipher = crypto.createDecipher(algorithm,password)
  var dec = decipher.update(text,'hex','utf8')
  dec += decipher.final('utf8');
  return dec;
}

function hashText(text){
    var hash = crypto.createHash('md5').update(text).digest("hex");
    //console.log(hash); 
    return hash;
}

function encryptThenAuthenticate(plainText,pw)
{
    var encryptedText = encrypt(plainText,pw);
    var hash = hashText(encryptedText);
    return encryptedText+"$"+hash;
}
function VerifyThenDecrypt(encryptedAndAuthenticatedText,pw)
{
    var encryptedAndHashArray = encryptedAndAuthenticatedText.split("$");
    var encrypted = encryptedAndHashArray[0];
    var hash = encryptedAndHashArray[1];
    var hash2Compare = hashText(encrypted);
    if (hash === hash2Compare)
    {
        return decrypt(encrypted,pw); 
    }
}

এটা দিয়ে পরীক্ষা করা যেতে পারে:

var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
console.log(VerifyThenDecrypt(doom,user.cryptoPassword));

আশাকরি এটা সাহায্য করবে :-)


নোডের ক্রিপ্টো মডিউল API এখনও অস্থির।

সংস্করণ 4.0.0 হিসাবে, স্থানীয় ক্রিপ্টো মডিউল আর অস্থির নয়। অফিসিয়াল ডকুমেন্টেশন থেকে :

ক্রিপ্টো

স্থিতিশীলতা: 2 - স্থিতিশীল

এপিআই সন্তোষজনক প্রমাণিত হয়েছে। এনপিএম ইকোসিস্টেমের সাথে সামঞ্জস্য একটি উচ্চ অগ্রাধিকার, এবং একেবারে প্রয়োজন না হওয়া পর্যন্ত ভাঙ্গা হবে না।

সুতরাং, বহিরাগত নির্ভরতা ব্যতীত, স্থানীয় বাস্তবায়ন ব্যবহার করা নিরাপদ বলে মনে করা উচিত।

রেফারেন্সের জন্য, ক্রিপ্টো মডিউল এখনও অস্থির ছিল যখন bellow উল্লেখ modules বিকল্প সমাধান হিসাবে প্রস্তাব করা হয়।

আপনি একটি মডিউল sha1 বা md5 এক ব্যবহার করতে পারেন যা উভয় কাজ।

$ npm install sha1

এবং তারপর

var sha1 = require('sha1');

var hash = sha1("my message");

console.log(hash); // 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb

অথবা

$ npm install md5

এবং তারপর

var md5 = require('md5');

var hash = md5("my message");

console.log(hash); // 8ba6c19dc1def5702ff5acbf2aeea5aa

(MD5 অনিরাপদ কিন্তু প্রায়ই Gravatar মত পরিষেবা দ্বারা ব্যবহৃত হয়।)

এই মডিউল এর API পরিবর্তন হবে না!


sha256("string or binary");

আমি অন্যান্য উত্তর সঙ্গে সমস্যা সম্মুখীন। আমি আপনাকে বাইটি স্ট্রিং ব্যবহার করার জন্য binary এনকোডিং আর্গুমেন্ট সেট করতে পরামর্শ দিই এবং জাভাস্ক্রিপ্ট (নোডজেএসএস) এবং পাইথন, পিএইচপি, গিথুব মত অন্যান্য ল্যাঙ্গেজ / পরিষেবাদির মধ্যে বিভিন্ন হ্যাশ প্রতিরোধ করতে ...

যদি আপনি এই কোডটি ব্যবহার না করেন, তবে আপনি নোডজেজ এবং পাইথন এর মধ্যে একটি ভিন্ন হ্যাশ পেতে পারেন ...

পাইথন, পিএইচপি, পার্ল, জিতুব (এবং একটি সমস্যা প্রতিরোধ করুন) যে একই হ্যাশ পেতে হয়:

নোডজেএস স্ট্রিংটির UTF-8 উপস্থাপনা হ্যাশিং করছে। অন্যান্য ভাষা (পাইথন, পিএইচপি বা পার্ল ... মত) বাইটি স্ট্রিং হ্যাশিং হয়।

আমরা বাইট স্ট্রিং ব্যবহার করতে বাইনারি যুক্তি যোগ করতে পারেন।

কোড:

const crypto = require("crypto");

function sha256(data) {
    return crypto.createHash("sha256").update(data, "binary").digest("base64");
    //                                               ------  binary: hash the byte string
}

sha256("string or binary");

ডকুমেন্টেশন:

  • crypto.createHash (অ্যালগরিদম [, বিকল্পগুলি]): অ্যালগরিদম প্ল্যাটফর্মের OpenSSL সংস্করণ দ্বারা সমর্থিত উপলব্ধ অ্যালগরিদমগুলিতে নির্ভরশীল।
  • hash.digest ([এনকোডিং]): এনকোডিং 'হেক্স', 'latin1' বা 'base64' হতে পারে। (বেস 64 আর কম)।

আপনি সমস্যাটি পেতে পারেন: sha256 ("\ xac"), "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", ইত্যাদি ...

  • অন্যান্য ভাষা (পিএইচপি, পাইথন, পার্ল ...) এবং আমার সমাধান .update(data, "binary") :

    sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47
  • ডিফল্টরূপে নোডজ (বাইনারি ছাড়া):

    sha1("\xac") //f50eb35d94f1d75480496e54f4b4a472a9148752






node.js