জাভাস্ক্রিপ্টে প্রয়োজনীয়তার সাথে এলোমেলো পাসওয়ার্ড স্ট্রিং উত্পন্ন করুন


96

আমি একটি এলোমেলো স্ট্রিং উত্পন্ন করতে চাই যার এজে এবং 3 নম্বর থেকে 5 টি বর্ণ থাকতে হবে have

আমি কীভাবে জাভাস্ক্রিপ্ট দিয়ে এটি করতে পারি?

আমি নিম্নলিখিত স্ক্রিপ্ট পেয়েছি, কিন্তু এটি আমার প্রয়োজনীয়তা পূরণ করে না।

        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        var string_length = 8;
        var randomstring = '';
        for (var i=0; i<string_length; i++) {
            var rnum = Math.floor(Math.random() * chars.length);
            randomstring += chars.substring(rnum,rnum+1);
        }

6
যদি এটি আপনার প্রয়োজনীয়তা পূরণ করে তবে প্রশ্ন কী? এছাড়াও, আপনার জোর করে পাসওয়ার্ডের প্রয়োজনীয়তা একটি খারাপ ধারণা।
রব ডব্লু


4
new Array(12).fill().map(() => String.fromCharCode(Math.random()*86+40)).join("") নিফটি একটি লাইন একটি খুব হালকা পদ্ধতির বিশেষ অক্ষরের উপরের নীচের সংখ্যাগুলির সাথে একটি চারটি চর পাসওয়ার্ড তৈরি করবে
তোফান্ডেল

উত্তর:


318

একটি নির্দিষ্ট সংখ্যক অক্ষর জোর করা একটি খারাপ ধারণা। এটি পাসওয়ার্ডের মান উন্নত করে না। সবচেয়ে খারাপ, এটি সম্ভাব্য পাসওয়ার্ডের সংখ্যা হ্রাস করে, যাতে হ'ল ব্রুটফোর্সিং দ্বারা হ্যাকিং সহজ হয়।

আলফানিউমেরিক অক্ষর সমন্বয়ে একটি এলোমেলো শব্দ তৈরি করতে, ব্যবহার করুন:

var randomstring = Math.random().toString(36).slice(-8);

এটা কিভাবে কাজ করে?

Math.random()                        // Generate random number, eg: 0.123456
             .toString(36)           // Convert  to base-36 : "0.4fzyo82mvyr"
                          .slice(-8);// Cut off last 8 characters : "yo82mvyr"

Number.prototype.toStringএবং string.prototype.sliceপদ্ধতিগুলির জন্য ডকুমেন্টেশন


6
আমি সম্মত, তবে কখনও কখনও আপনি সিদ্ধান্ত নিতে চান না;)
ffffff01

40
এটি ব্যবহার করবেন না: যেহেতু সংখ্যাটি বাইনারি থেকে দশমিক এ রূপান্তরিত হয়েছে এবং পূর্ণ দশমিক স্থান "পূরণ" করার জন্য পর্যাপ্ত বিট নেই, তাই শেষ অঙ্কটি কেবলমাত্র মানগুলির একটি নির্দিষ্ট সেট থেকে নির্বাচন করা হবে। উদাহরণস্বরূপ, আমার কম্পিউটারে, শেষ অঙ্কটি কেবল "i", "r" এবং "9" এর মধ্যে। পরিবর্তে এটি ব্যবহার করুন:Math.random().toString(36).substr(2, 8)
জোয়েল

4
36 কী করে তা বোঝানোর জন্য : মজিলা থেকে টস্ট্রিং () পদ্ধতিটি তার প্রথম যুক্তিকে পার্স করে এবং নির্দিষ্ট রেডিক্সের (বেস) একটি স্ট্রিং প্রতিনিধিত্ব ফিরিয়ে দেওয়ার চেষ্টা করে। 10-র উপরে রেডিক্সের জন্য, বর্ণমালার বর্ণগুলি 9-র বেশি সংখ্যাকে নির্দেশ করে। উদাহরণস্বরূপ, হেক্সাডেসিমাল সংখ্যাগুলির জন্য (বেস 16), একটি মাধ্যমে f ব্যবহার করা হয়। সুতরাং এটি অনুসারে, 36 রেডিক্স ব্যবহার করে আমরা 0-9 এর পরে অ্যাজ পাই।
শিশির গুপ্ত

4
@ শিশিরগুপ্ত .toStringকেবল ৩ 36 অবধি এবং এটির একটি ভিত্তি গ্রহণ করে This এই উত্তরটি একটি নন-ক্রিপ্টোগ্রাফিক র্যান্ডম স্ট্রিংয়ের জন্য ওয়ান-লাইনার হিসাবে বোঝানো হয়েছে। আপনি যদি রাজধানীও রাখতে চান তবে ব্যবহার করুন Math.random(বা crypto.getRandomValuesউপলভ্য হলে) এবং ফলাফলটি এজেড, এজেড, 0-9 এ মানচিত্র করুন। উদাহরণস্বরূপ নীচে সাজের উত্তরটি ব্যবহার করুন।
রব ডাব্লু

4
এটি কীভাবে ওপিকে "অ্যাজ এবং 3 নম্বর থেকে 5 টি বর্ণের" প্রয়োজনের প্রয়োজন তা দেখছে না । আমি এটি পেয়েছি, লেখক মনে করেন যে এটি একটি খারাপ ধারণা ... তবে তবে এটি প্রয়োজনীয়তা
mwag

39

আরও কিছুটা রক্ষণাবেক্ষণযোগ্য এবং সুরক্ষিত পদ্ধতির।

আমি কী বোঝাতে চাইছিলাম এবং এটি কীভাবে কাজ করে সে সম্পর্কে প্রসারিত করার জন্য একটি আপডেট।

  1. সুরক্ষিতসুরক্ষা সম্পর্কিত যে কোনও কিছুর জন্য এমডিএন ব্যবহারMath.random সম্পর্কে যথেষ্ট স্পষ্ট :

    Math.random() ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এলোমেলো সংখ্যা সরবরাহ করে না । সুরক্ষা সম্পর্কিত কোনও কিছুর জন্য এগুলি ব্যবহার করবেন না। পরিবর্তে ওয়েব ক্রিপ্টো এপিআই এবং আরও সুনির্দিষ্ট window.crypto.getRandomValues()পদ্ধতিটি ব্যবহার করুন।

    2020 -এর জন্যgetRandomValues ক্যান -আই-ব্যবহারের দিকে তাকিয়ে আপনার সম্ভবত আর msCryptoআর Math.randomফ্যালব্যাকের প্রয়োজন হবে না , যদি না আপনি প্রাচীন ব্রাউজারগুলির যত্ন নেন ।

  2. রক্ষণাবেক্ষণযোগ্যRegExp _pattern আপনি পাসওয়ার্ডে কোন চরিত্রের ক্লাসগুলি মঞ্জুরি দিয়েছিলেন তা নির্ধারণ করার একটি সহজ উপায় হিসাবে রক্ষণাবেক্ষণযোগ্য mostly তবে 3 টি জিনিস সম্পর্কে যেখানে প্রতিটি তার কাজ করে: একটি প্যাটার্নটি সংজ্ঞায়িত করে, যথাসম্ভব সুরক্ষিতভাবে একটি এলোমেলো বাইট পায়, দুটি সংযুক্ত করার জন্য একটি পাবলিক এপিআই সরবরাহ করে।

var Password = {
 
  _pattern : /[a-zA-Z0-9_\-\+\.]/,
  
  
  _getRandomByte : function()
  {
    // http://caniuse.com/#feat=getrandomvalues
    if(window.crypto && window.crypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.crypto.getRandomValues(result);
      return result[0];
    }
    else if(window.msCrypto && window.msCrypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.msCrypto.getRandomValues(result);
      return result[0];
    }
    else
    {
      return Math.floor(Math.random() * 256);
    }
  },
  
  generate : function(length)
  {
    return Array.apply(null, {'length': length})
      .map(function()
      {
        var result;
        while(true) 
        {
          result = String.fromCharCode(this._getRandomByte());
          if(this._pattern.test(result))
          {
            return result;
          }
        }        
      }, this)
      .join('');  
  }    
    
};
<input type='text' id='p'/><br/>
<input type='button' value ='generate' onclick='document.getElementById("p").value = Password.generate(16)'>


তদ্ব্যতীত এটি সর্বদা উত্পন্ন কোডে একটি সংখ্যা যুক্ত করে না এবং অপারেটিং ন্যূনতম 3 চায়
কিওয়ার্টজম্যান

একটি লাইব্রেরি পাওয়া গেছে যা উইন্ডো। ক্রিপ্টো.জেটর্যান্ডমভ্যালুগুলিকে সমর্থন করে এবং নোড.জেজে
ইউজিন

শুধু বলতে চাইছিলাম চিমটিতে পাসওয়ার্ড তৈরি করার জন্য আমার কিছু প্রয়োজন এবং এটি নিখুঁত। ধন্যবাদ!
কাইল কে

30

অনেক উত্তর (এটির মূল সহ) অপের চিঠিপত্র এবং সংখ্যা গণনার প্রয়োজনীয়তার দিকে নজর দেয় না। নীচে দুটি সমাধান রয়েছে: সাধারণ (কোনও মিনিট অক্ষর / সংখ্যা নেই) এবং নিয়ম সহ।

সাধারণ:

আমি বিশ্বাস করি এটি উপরের চেয়ে ভাল সাধারণ সমাধান, কারণ:

  • এটি গৃহীত / সর্বোচ্চ-ভোট প্রাপ্ত উত্তরের চেয়ে বেশি সুরক্ষিত এবং আরও বহুমুখী, কারণ এটি কেস-সংবেদনশীল উপায়ে যে কোনও চর সেটকে সমর্থন করে
  • এটি অন্যান্য উত্তরের চেয়ে আরও সংক্ষিপ্ত (সাধারণ সমাধানের জন্য, 3 লাইন সর্বাধিক; এক-রেখা হতে পারে)
  • এটি কেবল নেটিভ জাভাস্ক্রিপ্ট ব্যবহার করে - কোনও ইনস্টলেশন বা অন্যান্য লিবসের প্রয়োজন নেই

মনে রাখবেন যে

  • আইই তে কাজ করার জন্য, অ্যারে.ফিল () প্রোটোটাইপটি অবশ্যই পলিফিল্ড করা উচিত
  • যদি উপলভ্য থাকে তবে ম্যাথ.রেন্ডম () এর পরিবর্তে উইন্ডো.ক্রিপ্টো.জেট র্যান্ডমভ্যালু () ব্যবহার করা ভাল (ধন্যবাদ বিন্যাসামিনএইচকে নির্দেশ করার জন্য)

থ্রি-লাইনার:

var pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var pwdLen = 10;
var randPassword = Array(pwdLen).fill(pwdChars).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');

বা, ওয়ান-লাইনার হিসাবে:

var randPassword = Array(10).fill("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');

চিঠি / সংখ্যা বিধি সহ

এখন, উপরের উপর একটি প্রকরণ। এটি প্রদত্ত চরসেটগুলি (চিঠি, সংখ্যা, হয়) থেকে তিনটি এলোমেলো স্ট্রিং উত্পন্ন করবে এবং তারপরে ফলাফলটি স্ক্র্যাম্ব করবে।

দয়া করে নীচের ব্যবহারগুলি সারণি () কেবলমাত্র উদাহরণস্বরূপ উদ্দেশ্যে নোট করুন। উত্পাদন ব্যবহারের জন্য, ডার্সটেনফিল্ডের মতো একটি শাফল ফাংশন দিয়ে নীচের ক্রম () ফাংশনটি প্রতিস্থাপন করুন ।

প্রথমত, একটি ফাংশন হিসাবে:

function randPassword(letters, numbers, either) {
  var chars = [
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", // letters
   "0123456789", // numbers
   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" // either
  ];

  return [letters, numbers, either].map(function(len, i) {
    return Array(len).fill(chars[i]).map(function(x) {
      return x[Math.floor(Math.random() * x.length)];
    }).join('');
  }).concat().join('').split('').sort(function(){
    return 0.5-Math.random();
  }).join('')
}

// invoke like so: randPassword(5,3,2);

একই জিনিস, 2-লাইনার হিসাবে (স্বীকারোক্তিজনকভাবে, খুব দীর্ঘ এবং কুরুচিপূর্ণ লাইনগুলি - এবং আপনি যদি কোনও যথাযথ স্থানচ্যূত ফাংশন ব্যবহার করেন তবে 1-লাইনার হবে না recommended প্রস্তাবিত নয় তবে কখনও কখনও এটি মজাদার):

var chars = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","0123456789", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"];
var randPwd = [5,3,2].map(function(len, i) { return Array(len).fill(chars[i]).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('') }).concat().join('').split('').sort(function(){return 0.5-Math.random()}).join('');

উত্তম উত্তর, তবে বড় হাতের অক্ষর Y আপনার উত্পন্ন কোনও পাসওয়ার্ডে কখনই উপস্থিত হবে না।
রায়ান শিলিংটন

4
ধন্যবাদ আমি ওপি প্রশ্নের মধ্যে চরসেটটি ব্যবহার করেছি তবে মনে হচ্ছে এটি ত্রুটিযুক্ত ছিল। এখন আপডেট হয়েছে।
এমওয়াগ

আপনি বলছেন "এটি গৃহীত / সর্বোচ্চ ভোট প্রাপ্ত উত্তরের চেয়ে বেশি সুরক্ষিত"। আপনি দয়া করে কারণ বিস্তারিত বলতে পারেন?
বেনজামিন

এছাড়াও ম্যাথ.র্যান্ডম () ব্যবহার অনুমানযোগ্য হতে পারে। সুতরাং পাসওয়ার্ড উত্পন্ন করার জন্য উইন্ডো ক্রিপ্টো.জেটআর্যান্ডমভ্যালুসের মতো কোনও ফাংশন ব্যবহার করুন।
বেনজামিন

4
এটি আরও সুরক্ষিত হওয়ার কারণ হ'ল এটি স্ট্রিং (36) ব্যবহারের চেয়ে আউটপুটে সম্ভাব্য অক্ষরের একটি উচ্চ সংখ্যার সমর্থন করে। স্থির আউটপুট দৈর্ঘ্যের (উদাহরণস্বরূপ 8), আপনি যদি সর্বাধিক 36 টি চয়ন করতে চান তবে আপনার কাছে 62 টি অক্ষর (উদাহরণ হিসাবে) বা আরও ভাল, পুরো 95 মুদ্রণযোগ্য (আসকি) ) অক্ষর, বা ইউনিকোড ব্যবহার করে, বাইট প্রতি সম্ভাবনার আরও বেশি সংখ্যক।
mwag

11

এমন কারও জন্য যিনি একটি সহজ স্ক্রিপ্ট খুঁজছেন। না while (true), না if/else, কোনও ঘোষণা নেই।

এমওয়াগের উত্তরের ভিত্তিতে, তবে এটি একটির crypto.getRandomValuesচেয়ে শক্তিশালী এলোমেলো ব্যবহার করে Math.random

Array(20)
  .fill('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$')
  .map(x => x[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * x.length)])
  .join('');

দেখুন এই জন্য 0xffffffff

বিকল্প ঘ

var generatePassword = (
  length = 20,
  wishlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$"
) => Array(length)
      .fill('')
      .map(() => wishlist[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * wishlist.length)])
      .join('');

console.log(generatePassword());

বিকল্প 2

var generatePassword = (
  length = 20,
  wishlist = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$'
) =>
  Array.from(crypto.getRandomValues(new Uint32Array(length)))
    .map((x) => wishlist[x % wishlist.length])
    .join('')

console.log(generatePassword())

নোড.জেএস

const crypto = require('crypto')

const generatePassword = (
  length = 20,
  wishlist = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@-#$'
) =>
  Array.from(crypto.randomFillSync(new Uint32Array(length)))
    .map((x) => wishlist[x % wishlist.length])
    .join('')

console.log(generatePassword())

4
অপরিজ্ঞাপিত অফসেটের কারণে এটি ধারাবাহিকভাবে 20 দৈর্ঘ্যের পাসওয়ার্ড দিচ্ছে না। + 1অংশ প্রয়োজন নেই এবং সরানো হতে পারে।
ব্রাইক 10

ভাল ব্র্যাক @ ব্রাইক আপডেট হয়েছে। ধন্যবাদ
নিনাহ ফাম

4
দরকারী এবং সহজ সমাধান। নোডজেএস-এর মধ্যে যে কেউ এটি করতে চাইছেন কেবল ক্রিপ্টো.আরন্ডমফিলসিঙ্কেরcrypto.getRandomValues সাথে প্রতিস্থাপন করতে পারবেন ।
আরভি পান্ডে

নোড.জেএস সংস্করণ যুক্ত হয়েছে। ধন্যবাদ @ আরভি পান্ডে
নিনহ ফাম

8

এটি ঠিক অপ্টিমাইজড নয়, তবে এটি কাজ করা উচিত work

var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
var charCount = 0;
var numCount = 0;

for (var i=0; i<string_length; i++) {
    // If random bit is 0, there are less than 3 digits already saved, and there are not already 5 characters saved, generate a numeric value. 
    if((Math.floor(Math.random() * 2) == 0) && numCount < 3 || charCount >= 5) {
        var rnum = Math.floor(Math.random() * 10);
        randomstring += rnum;
        numCount += 1;
    } else {
        // If any of the above criteria fail, go ahead and generate an alpha character from the chars string
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
        charCount += 1;
    }
}

alert(randomstring);

اور

এখানে পরীক্ষার জন্য আপনার জন্য এখানে একটি জাসফিডাল রয়েছে: http://jsfiddle.net/sJGW4/3/


4
chars.substring(rnum, rnum+1)ঠিক এর মতোchars.charAt(rnum)
ম্যাড ইচেট

8

@ রবডাব্লু নোট হিসাবে, ওপি স্কিমের প্রস্তাবিত নির্দিষ্ট সংখ্যক অক্ষরের মধ্যে পাসওয়ার্ড সীমাবদ্ধ করা একটি খারাপ ধারণা । তবে আরও খারাপ, যেগুলির উপর ভিত্তি করে কোডগুলি প্রস্তাব করে এমন উত্তরগুলি হ'ল Math.random, আসলেই খুব খারাপ ধারণা

খারাপ ধারণা দিয়ে শুরু করা যাক । ওপি কোড এলোমেলোভাবে 5 অক্ষর এবং 3 নম্বরে র্যান্ডম স্ট্রিং সীমাবদ্ধ 62. একটি সেট থেকে 8 টি অক্ষর একটি স্ট্রিং নির্বাচন হয় মানে ফলে পাসওয়ার্ড, থাকবে শ্রেষ্ঠ সময়ে , এনট্রপি এর 28.5 বিট (যেমন 47.6 বিট একটি সম্ভাব্য উল্টোদিকে যদি 5 টি বর্ণ এবং 3 সংখ্যার বিতরণ সীমাবদ্ধতা সরানো থাকে)। এটা খুব ভাল না। তবে বাস্তবে পরিস্থিতি আরও ভয়াবহ। শ্রেষ্ঠ সময়ে কোডের দৃষ্টিভঙ্গি ব্যবহার দ্বারা ধ্বংস করা হয় Math.randomপাসওয়ার্ডের জন্য এনট্রপি উৎপাদিত উপায় হিসেবে। Math.randomএটি একটি সিউডো এলোমেলো সংখ্যা জেনারেটর । সিউডো এলোমেলো সংখ্যা জেনারেটরের নির্বিচার প্রকৃতির কারণে ফলাফলের পাসওয়ার্ডগুলির এনট্রপি সত্যই খারাপ, এই জাতীয় প্রস্তাবিত সমাধানকে সত্যিই খারাপ ধারণা সরবরাহ করে । ধরে নিই এই পাসওয়ার্ডগুলি শেষ ব্যবহারকারীদের (ডাব্লু ডাব্লু কী হবে) সক্রিয় করা হচ্ছে, একটি সক্রিয় প্রতিপক্ষ যে এই জাতীয় পাসওয়ার্ড পেয়েছে তাদের ভবিষ্যতের পাসওয়ার্ডগুলি অন্যান্য ব্যবহারকারীর কাছে ডোলড করে দেওয়ার পূর্বাভাস দেওয়ার খুব ভাল সম্ভাবনা রয়েছে এবং এটি সম্ভবত খুব ভাল জিনিস নয়।

কিন্তু ঠিক খারাপ ধারণা ফিরে । ধরে নিন একটি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী সিউডো এলোমেলো সংখ্যা জেনারেটরের পরিবর্তে ব্যবহৃত হয়েছে Math.random। আপনি কেন পাসওয়ার্ডগুলিকে ২৮.৫ বিটে সীমাবদ্ধ রাখবেন? যেমনটি উল্লেখ করা হয়েছে, এটি খুব ভাল নয়। সম্ভবত 5 টি অক্ষর, 3 নম্বর স্কিমটি এলোমেলোভাবে ডোলড পাসওয়ার্ডগুলি পরিচালনা করতে ব্যবহারকারীদের সহায়তা করা। কিন্তু স্বীকার করে নেওয়াই ভালো, আপনি সামঞ্জস্য বজায় রাখা দাও পাবেন ব্যবহারের স্বাচ্ছন্দ বিরুদ্ধে ব্যবহারের মান , এবং এনট্রপি এর 28.5 বিট একটি সক্রিয় প্রতিদ্বন্দ্বী বিরুদ্ধে প্রতিরক্ষা অনেক মান নয়।

তবে যথেষ্ট খারাপ। আসুন সামনে একটি পথ প্রস্তাব। আমি জাভাস্ক্রিপ্ট এন্ট্রপাস্ট্রিং লাইব্রেরি ব্যবহার করব যা "দক্ষতার সাথে বিভিন্ন চরিত্রের সেটগুলি থেকে নির্দিষ্ট এন্ট্রপির ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী র্যান্ডম স্ট্রিং দক্ষতার সাথে তৈরি করে"। ওপি characters২ টি অক্ষরের পরিবর্তে, আমি সহজেই বিভ্রান্ত অক্ষরগুলির ব্যবহার বা ইংরেজি শব্দের গঠন হ্রাস করতে 32 টি বর্ণযুক্ত একটি অক্ষর সেট ব্যবহার করব। এবং 5 টি বর্ণের পরিবর্তে, 3 নম্বর স্কিম (যা খুব কম এনট্রপি রয়েছে), আমি ঘোষণা করব যে পাসওয়ার্ডটির 60 টি বিট থাকবে এন্ট্রপি (এটি সহজ দামের তুলনায় ভারসাম্য)।

import { Entropy, charSet32 } from 'entropy-string'
const random = new Entropy({ bits: 60, charset: charset32 })
const string = random.string()

"Q7LfR8Jn7RDp"

এন্টারপপির Entropyকাঙ্ক্ষিত বিটগুলি নির্দিষ্টভাবে এন্টারপপির নির্দিষ্ট বিস্তৃত বৈশিষ্ট্যের জন্য উল্লেখ করুন যেগুলি এলোমেলো স্ট্রিং প্রজন্মের সাথে দেখা যায় যা একটি স্ট্রিংয়ের দৈর্ঘ্যে পাস করা নির্দিষ্ট করে (যা উভয়ই বিভ্রান্ত এবং সাধারণত অপ্রকাশিত, তবে এটি অন্য গল্প)।


ধন্যবাদ! মনে রাখবেন যে এখানে উদাহরণটি আর কাজ করে না।
গেজা তুরি

4
কোড স্নিপেটটি লাইব্রেরির নতুন সংস্করণে আপডেট করা হয়েছে। লাইব্রেরিতে README এবং গিটহাব রেপোর অনেকগুলি উদাহরণ রয়েছে।
ডিঙ্গো আকাশ

7

আপনার যদি কমপক্ষে 1 নম্বর, 1 টি বড় হাতের অক্ষর এবং 1 টি ছোট অক্ষর সহ উত্পন্ন একটি পাসওয়ার্ড প্রয়োজন:

function generatePassword(passwordLength) {
  var numberChars = "0123456789";
  var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var lowerChars = "abcdefghijklmnopqrstuvwxyz";
  var allChars = numberChars + upperChars + lowerChars;
  var randPasswordArray = Array(passwordLength);
  randPasswordArray[0] = numberChars;
  randPasswordArray[1] = upperChars;
  randPasswordArray[2] = lowerChars;
  randPasswordArray = randPasswordArray.fill(allChars, 3);
  return shuffleArray(randPasswordArray.map(function(x) { return x[Math.floor(Math.random() * x.length)] })).join('');
}

function shuffleArray(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

alert(generatePassword(12));

আপনি যদি খেলা / পরীক্ষা খেলতে চান তবে এখানে ফ্রিডল : http://jsfiddle.net/sJGW4/155/

আমাকে এটি তৈরির শুরু করার জন্য @ এমওয়াগের কাছে প্রপস।


4
আপনি ছোট হাতছাড়া করছেন j: পি অন্যথায়, ভাল জিনিস এখানে ঠিক আছে। যদিও আমার প্রয়োজনীয়তাগুলি পূরণ করতে এটি কিছুটা পরিবর্তন করেছে।
ইগোর ইয়াভিচ

6

আমি আপনার উত্তর থেকে অনুপ্রাণিত একটি ছোট লিখেছি:

(function(){g=function(){c='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';p='';for(i=0;i<8;i++){p+=c.charAt(Math.floor(Math.random()*62));}return p;};p=g();while(!/[A-Z]/.test(p)||!/[0-9]/.test(p)||!/[a-z]/.test(p)){p=g();}return p;})()

এই ফাংশনটি পাসওয়ার্ডটি দেয় এবং বুকমার্কলে যেমন ব্যবহার করা যায়:

javascript:alert(TheCodeOfTheFunction);

3

আমি কোনও বাধ্যতামূলক পাসওয়ার্ড ব্যবহার করার পরামর্শ দেব না কারণ এটি ব্যবহারকারীর সুরক্ষা সীমাবদ্ধ করে তবে কোনওভাবেই এটি করার কয়েকটি উপায় রয়েছে -

প্রচলিত জাভাস্ক্রিপ্ট পদ্ধতি -

Math.random().toString(36).slice(-8);

র্যান্ডম স্ট্রিং ব্যবহার করে

এলোমেলো স্ট্রিং ইনস্টল করুন:

npm install randomstring

এটি অ্যাপ.জেএসসে ব্যবহার করে -

var randStr = require('randomstring');

var yourString = randStr.generate(8);

আপনার পাসওয়ার্ডের মান ভেরিয়েবলের মধ্যে রাখা হচ্ছে yourString

জোর করে পাসওয়ার্ড ব্যবহার করবেন না!

জোরপূর্বক পাসওয়ার্ড আপনার সুরক্ষার ক্ষতি করতে পারে কারণ সমস্ত পাসওয়ার্ড একই অক্ষর সেটের অধীনে থাকবে, যা সহজেই লঙ্ঘন হতে পারে!


3

ঠিক আছে যদি আমি ভাল করে বুঝতে পারি আপনি একটি এলোমেলো স্ট্রিং পাসওয়ার্ড পাওয়ার চেষ্টা করছেন যা 5 অক্ষর এবং 3 নম্বর এলোমেলোভাবে অবস্থান করে এবং যার দৈর্ঘ্য 8 অক্ষর এবং আপনি মাজ এবং ন্যূনতম অক্ষর গ্রহণ করেন, আপনি নিম্নলিখিত ফাংশনটি দিয়ে এটি করতে পারেন :

function randPass(lettersLength,numbersLength) {
    var j, x, i;
    var result           = '';
    var letters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var numbers       = '0123456789';
    for (i = 0; i < lettersLength; i++ ) {
        result += letters.charAt(Math.floor(Math.random() * letters.length));
    }
    for (i = 0; i < numbersLength; i++ ) {
        result += numbers.charAt(Math.floor(Math.random() * numbers.length));
    }
    result = result.split("");
    for (i = result.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = result[i];
        result[i] = result[j];
        result[j] = x;
    }
    result = result.join("");
    return result
}

function randPass(lettersLength,numbersLength) {
    var j, x, i;
    var result           = '';
    var letters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    var numbers       = '0123456789';
    for (i = 0; i < lettersLength; i++ ) {
        result += letters.charAt(Math.floor(Math.random() * letters.length));
    }
    for (i = 0; i < numbersLength; i++ ) {
        result += numbers.charAt(Math.floor(Math.random() * numbers.length));
    }
    result = result.split("");
    for (i = result.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = result[i];
        result[i] = result[j];
        result[j] = x;
    }
    result = result.join("");
    return result
}
console.log(randPass(5,3))


2
var letters = ['a','b','c','d','e','f','g','h','i','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    var numbers = [0,1,2,3,4,5,6,7,8,9];
    var randomstring = '';

        for(var i=0;i<5;i++){
            var rlet = Math.floor(Math.random()*letters.length);
            randomstring += letters[rlet];
        }
        for(var i=0;i<3;i++){
            var rnum = Math.floor(Math.random()*numbers.length);
            randomstring += numbers[rnum];
        }
     alert(randomstring);

1

এবং অবশেষে, ভাসমান পয়েন্ট হ্যাকগুলি ব্যবহার না করে:

function genpasswd(n) {
    // 36 ** 11 > Number.MAX_SAFE_INTEGER
    if (n > 10)
        throw new Error('Too big n for this function');
    var x = "0000000000" + Math.floor(Number.MAX_SAFE_INTEGER * Math.random()).toString(36);
    return x.slice(-n);
}

1

একটি বড় হাতের অক্ষরের সাথে পাসওয়ার্ড সুরক্ষিত করুন।

let once = false;

    let newPassword = Math.random().toString(36).substr(2, 8).split('').map((char) => {
                    if(!Number(char) && !once){
                        once = true;
                        return char.toUpperCase();
                    }
                    return char;
                }).join('');

    console.log(newPassword)

1

আমার ক্রিপ্টো ভিত্তিক সমস্যাটি গ্রহণ করুন। ES6 ব্যবহার করে এবং কোনও ব্রাউজার বৈশিষ্ট্য চেক বাদ দেওয়া। সুরক্ষা বা পারফরম্যান্স সম্পর্কে কোন মন্তব্য?

const generatePassword = (
  passwordLength = 12,
  passwordChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
) =>
  [...window.crypto.getRandomValues(new Uint32Array(passwordLength))]
    .map(x => passwordChars[x % passwordChars.length])
    .join('');


1

পাসসওয়ার্ডজেনারেটর সার্ভিস নামে একটি পাসওয়ার্ড জেনারেটর পরিষেবা তৈরি করুন

import { Injectable } from '@angular/core';

@Injectable()
export class PasswordGeneratorService {

  generatePassword(length:number,upper:boolean,numbers:boolean,symbols:boolean) {
    const passwordLength = length || 12;
    const addUpper =  upper;
    const addNumbers =  numbers;
    const addSymbols =  symbols;

    const lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    const upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
    const numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    const symbols = ['!', '?', '@'];

    const getRandom = array => array[Math.floor(Math.random() * array.length)];

    let finalCharacters = '';

    if (addUpper) {
      finalCharacters = finalCharacters.concat(getRandom(upperCharacters));
    }

    if (addNumbers) {
      finalCharacters = finalCharacters.concat(getRandom(numbers));
    }

    if (addSymbols) {
      finalCharacters = finalCharacters.concat(getRandom(symbols));
    }

    for (let i = 1; i < passwordLength - 3; i++) {
      finalCharacters = finalCharacters.concat(getRandom(lowerCharacters));
    }

    return  finalCharacters.split('').sort(() => 0.5 - Math.random()).join('');
  }
}

আপনার ব্যবহারের মডিউলটিতে পরিষেবা যুক্ত করতে ভুলবেন না

@NgModule({
  imports: [
    CommonModule,
    SharedModule,
    CommonModule,
    RouterModule.forChild(routes),
    FormsModule,
    ReactiveFormsModule,
    FlexLayoutModule,
    TranslateModule,
    ExistingUserDialogModule,
    UserDocumentsUploadDialogModule
  ],
  declarations: [
    UserListComponent,
    EditUserDialogComponent,
    UserEditorComponent
  ],
  entryComponents: [
    EditUserDialogComponent
  ],
  providers: [
    AuthService,
    PasswordGeneratorService
  ]
})
export class UsersModule {
}

আপনি নিয়ন্ত্রকটিতে এমন একটি পদ্ধতি যুক্ত করুন যা পরিষেবার অভ্যন্তরে পাসওয়ার্ড উত্পন্ন পদ্ধতি কল করে এবং ফলাফলটি পাসওয়ার্ড ক্ষেত্রে সেট করে

  constructor(
     private passwordGenerator: PasswordGeneratorService,
    )
  get newPassword() {
    return this.password.get('newPassword');
  }
  generatePassword() {
    this.newPassword.setValue(this.passwordGenerator.generatePassword(8,true,true,true));
  }

আমি কেবল ফাংশনটি ছিনিয়ে নিয়েছি generatePasswordএবং এটি ব্যবহার করেছি, পুরো ক্লাসের প্রয়োজন নেই। thnx
Biskrem মুহাম্মদ

0

নির্বাচিত দৈর্ঘ্যের সাথে একটি এলোমেলো পাসওয়ার্ড স্ট্রিং জেনারেটর রয়েছে

let input = document.querySelector("textarea");
let button = document.querySelector("button");
let length = document.querySelector("input");

function generatePassword(n) 
{
	let pwd = "";

  while(!pwd || pwd.length < n)
  {
  	pwd += Math.random().toString(36).slice(-22);
  }
  
  return pwd.substring(0, n);
}

button.addEventListener("click", function()
{
	input.value = generatePassword(length.value);
});
<div>password:</div>
<div><textarea cols="70" rows="10"></textarea></div>
<div>length:</div>
<div><input type="number" value="200"></div>
<br>
<button>gen</button>


0

ভাল, আপনি ব্রাউজারের সাম্প্রতিক সংস্করণে উইন্ডো ক্রাইপ্টো অবজেক্টটি সর্বদা ব্যবহার করতে পারেন।

এলোমেলো নম্বর পেতে কেবল একটি লাইন কোডের প্রয়োজন:

let n = window.crypto.getRandomValues(new Uint32Array(1))[0];

এটি ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করতে সহায়তা করে। এমডিএন ওয়েব ডক্সে আরও তথ্য - উইন্ডো ক্রাইপ্টো


0

var Password = {
 
  _pattern : /[a-zA-Z0-9_\-\+\.]/,
  
  
  _getRandomByte : function()
  {
    // http://caniuse.com/#feat=getrandomvalues
    if(window.crypto && window.crypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.crypto.getRandomValues(result);
      return result[0];
    }
    else if(window.msCrypto && window.msCrypto.getRandomValues) 
    {
      var result = new Uint8Array(1);
      window.msCrypto.getRandomValues(result);
      return result[0];
    }
    else
    {
      return Math.floor(Math.random() * 256);
    }
  },
  
  generate : function(length)
  {
    return Array.apply(null, {'length': length})
      .map(function()
      {
        var result;
        while(true) 
        {
          result = String.fromCharCode(this._getRandomByte());
          if(this._pattern.test(result))
          {
            return result;
          }
        }        
      }, this)
      .join('');  
  }    
    
};
<input type='text' id='p'/><br/>
<input type='button' value ='generate' onclick='document.getElementById("p").value = Password.generate(16)'>


0

ম্যাথ.র্যান্ডম () এর সাথে উত্পন্ন কোনও পাসওয়ার্ড অত্যন্ত খারাপ

এই ফাংশনটি সিস্টেমের সময়টিকে এলোমেলো সংখ্যা জেনারেটরের জন্য বীজ হিসাবে ব্যবহার করে। যে কেউ পাসওয়ার্ড তৈরির সময় জানে সে খুব সহজেই পাসওয়ার্ডটিকে জোর করে ফেলতে পারে।

প্রায় সব ক্ষেত্রেই এই ডেটা সহজেই উপলভ্য - কেবল একটি হ্যাকড ডাটাবেসে নিবন্ধনকালীন কলামটি নিন এবং ম্যাথ.র্যান্ডম () অ্যালগরিদমের দ্বারা 15 থেকে 0 মিনিটের সময় ব্যবহার করে তৈরি করা সমস্ত মান পরীক্ষা করুন।

ম্যাথআর্যান্ডম () দিয়ে উত্পন্ন একটি পাসওয়ার্ড সম্পূর্ণরূপে মূল্যহীন কারণ পাসওয়ার্ডটি প্রথম ব্যবহৃত হওয়ার সময় এটি ক্র্যাক করার জন্য যথেষ্ট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.