র্যান্ডম পাসওয়ার্ড জেনারেটর


40

ডোমেন সার্ভারটির প্রয়োজন যে সমস্ত কর্মীদের নিম্নলিখিত নিয়ম মেনে একটি শক্তিশালী, এলোমেলো পাসওয়ার্ড রয়েছে:

  • ঠিক 15 অক্ষর দীর্ঘ।
  • কেবল কীবোর্ড-টাইপযোগ্য অক্ষর (নীচে কোড-টাইপে দেখানো হয়েছে)। ALT + NUMPAD কোড ব্যবহার করতে বিক্রয় শেখানোর অনুমতি নেই।
  • কমপক্ষে 1 টি ছোট মামলার চিঠি: abcdefghijklmnopqrstuvwxyz
  • কমপক্ষে ১ টি বড় হাতের অক্ষর: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • কমপক্ষে 1 সংখ্যার অঙ্ক: 0123456789
  • কমপক্ষে 1 টি প্রতীক: `~!@#$%^&*()_+-={}|[]\:";'<>?,./

এই উদ্দেশ্যে আইটি চালু করেছে এবং সমস্ত কর্মীদের মধ্যে একটি র্যান্ডম পাসওয়ার্ড জেনারেটর বিতরণ করবে। সমস্ত কর্মীদের র্যান্ডম পাসওয়ার্ড জেনারেটর ব্যবহার করতে হবে। উপরের পাসওয়ার্ড বিধিনিষেধ ছাড়াও র‌্যান্ডম পাসওয়ার্ড জেনারেটরের প্রয়োজনীয়তাগুলি হ'ল:

  • এটি অবশ্যই অনুমতিযোগ্য সমস্ত অক্ষরের সমস্ত ক্রম উত্পন্ন করতে সক্ষম হবে।
  • এটি অবশ্যই স্ক্রিনে উত্পন্ন পাসওয়ার্ড প্রদর্শন করবে।
  • কোডটি যতটা সম্ভব ছোট হতে হবে (বাইটে)।

পরের সপ্তাহের মধ্যে আপনার প্রস্তাবিত সমাধান জমা দিন।


10
আপনারও দাবি করা উচিত যে অনুমতি দেওয়া সমস্ত পাসওয়ার্ড একই সম্ভাবনার সাথে উপস্থিত হবে (অন্যথায় আমি কেবল অনুমোদিত অক্ষরগুলি সহ একটি 30 টি অক্ষরের দীর্ঘ তালিকা তৈরি করতে পারি, এটি পরিবর্তন করতে পারি এবং প্রথম 15 টি দিতে পারি)
মার্টিন থোমা

@ মুজ, সম্মত আমি একটি নতুন নিয়ম যুক্ত করেছি।
হ্যান্ড-ই-ফুড

22
আইটি ছেলেদের বরখাস্ত করা উচিত, বা কমপক্ষে আরও ভাল শিক্ষিত: আপনি যদি এলোমেলোভাবে পাসওয়ার্ড তৈরি করেন, তবে প্রতিটি বিভাগের অন্তত একটি চরিত্র অন্তর্ভুক্তকারীদের মধ্যে অনুমতিযোগ্য পাসওয়ার্ডগুলির সেটকে সীমাবদ্ধ করা পাসওয়ার্ডগুলিকে দুর্বল করে দেয় , যেহেতু এটির আকার হ্রাস করে জায়েজ সেট। এবং আমাদের প্রোগ্রামগুলি এত সহজ হবে যদি আমাদের এটির জন্য পরীক্ষা না করতে হয় ... ঠিক আছে, এতগুলি জমা দেওয়ার পরে প্রতিযোগিতাটি পরিবর্তন করবেন না; এটি একটি চ্যালেঞ্জ হিসাবে ঠিক আছে।
এমভিজি

10
@ এমভিজি প্রকৃতপক্ষে:correcthorsebatterystaple
জনাথন

1
সমস্ত পাসওয়ার্ড জেনারেটযোগ্য হওয়ার প্রয়োজনে আপনি @ মূসকে সত্যই উত্তর দিয়েছেন না। তাদের সমান সম্ভাবনা নিয়ে উপস্থিত হওয়া উচিত।
ইথান বলকার

উত্তর:


29

গণিত (18)

আমাকে একটু ঠকাই

= 15char ASCII pwd
&(^F7yP8k:*1P<t

PS সুরক্ষা নয় :)


6
কোডটি কোথায়?
ডেভিডসি

11
এটি কি প্রতিটি চরিত্র শ্রেণীর প্রয়োজনীয়তার কমপক্ষে একটি পূরণ করার গ্যারান্টিযুক্ত ?
হ্যান্ড-ই-ফুড

3
@ হ্যান্ড-ই-ফুড হ্যাঁ, এটি! আপনি যদি ব্যাখ্যাটির দিকে নজর দেন তবে আপনি দেখতে পাবেন: পাসওয়ার্ডের দৈর্ঘ্য 15, নিম্ন-অক্ষরের অক্ষরগুলি প্রয়োজনীয়, বড় হাতের অক্ষরগুলি প্রয়োজনীয়, সংখ্যাগুলি প্রয়োজনীয়, বিশেষ অক্ষরগুলি প্রয়োজনীয়।
ybeltukov

6
+1 চতুর, কিন্তু স্নিগ্ধ।
ডেভিডসি

10
আমি জানতাম যে ম্যাথেমেটিকার সবকিছুর জন্য একটি ফাংশন রয়েছে, তবে এটি ?
কনরাড বোরোস্কি

13

রুবি, 74 69 বাইট

সমস্ত শ্রেণীর অক্ষর উপস্থিত না হওয়া পর্যন্ত কেবল এএসসিআই পরিসীমা 33 - 126 থেকে এলোমেলো নমুনা:

$_=[*?!..?~].sample(15)*''until~/\d/&&~/[a-z]/&&~/[A-Z]/&&~/\W|_/
p$_

রুবি, 39 বাইট

মজ এর চালাক আবিষ্কার ব্যবহার:

p"0123abcdABCD-+/<".chars.sample(15)*''

জনতা সন্তুষ্ট করতে সম্পাদনা করুন:

মনে রাখবেন যে আমি প্রথম পোস্ট করার পরে নিয়মগুলি পরিবর্তন হয়েছিল । সেই সময়টিতে পূর্বের উভয় এন্ট্রিই বিধি প্রয়োগ করেছিল। আমি আরও উল্লেখ করতে চাই যে নিয়মগুলি এখনও খুব বেশি সংজ্ঞায়িত হয়নি:

(..) সমস্ত অনুমতিযোগ্য অক্ষরের সমস্ত অনুমতি

"Permutations"। আছে কোন বিনিময়ের অনুমোদিত অক্ষরের নিয়ম বাকি মেনে চলে, তাহলে মঞ্জুরিযোগ্য অক্ষর নিজেই সেট যতদিন কারণ অনুমোদিত অক্ষরের সেট কোন বিন্যাস (একই পাসওয়ার্ড 15 অক্ষর দীর্ঘ হতে অনুমিত হয়)। এবং একটি অনুচ্ছেদে কোনও পুনরাবৃত্তি নেই। তবে আমার প্রথম এন্ট্রিটি এখানে অন্যান্য ভাল আপোভোটেড উত্তরের চেয়ে অনেক বেশি "এলোমেলো"।

যাইহোক, এখানে আপনি এটি আছে। অক্ষরের পুনরাবৃত্তি এবং আন্ডারস্কোরকে অনুমতি দেয়:

রুবি, 77 বাইট

$_=([*?!..?~]*15).sample(15)*''until~/\d/&&~/[a-z]/&&~/[A-Z]/&&~/\W|_/
puts$_

আমি এইটির putsপরিবর্তে এটিও ব্যবহার করেছি pকারণ p"উদ্ধৃতি চিহ্নগুলিতে আবদ্ধ স্ট্রিংগুলি মুদ্রণ করে এবং কিছু অক্ষর ব্যাকস্ল্যাশ নিয়ে পালিয়ে যায়।

রুবি, 70 বাইট

ভেন্টোরো যেমন উল্লেখ করেছেন, রেজিক্সির ~সামনে এড়ানো যেতে পারে এবং printপ্রতিস্থাপন করতে পারে puts$_। তবে কুৎসিত আউটপুটটির ফলে এটি আপনি সমস্ত প্রত্যাখ্যানকৃত পাসওয়ার্ডগুলিও মুদ্রণ করে একে ওয়ান-লাইনারে ছড়িয়ে দিতে পারেন:

puts$_=([*?!..?~]*15).sample(15)*''until/\d/&&/[a-z]/&&/[A-Z]/&&/\W|_/

ব্যাখ্যা

অনুরোধ হিসাবে. $_একটি আধা-ঐন্দ্রজালিক পরিবর্তনশীল যে গত লাইন ইনপুট থেকে পড়া রয়েছে - তাই আপনি সবসময়, এটা সঞ্চয় করতে মত প্রয়োজন হবে না এই । এখানে তবে আমরা এটি অন্য কোনও সম্পত্তির কারণে ব্যবহার করি, অর্থাৎ ~অপারেটর সরাসরি এটিতে একটি রেজেক্স প্রয়োগ করে, আমি প্রথমে ক্রোন দ্বারা শিখেছি এমন কৌশল । আমি এর ব্যবহারটি প্রতিস্থাপন করেছি all, তবে আপনি যদি বাকীটি ( দস্তাবেজগুলি দেখুন ) পান তবে এটি বোঝা বেশ সহজ হওয়া উচিত ।


2
আপনি কি দয়া করে আপনার কোডটি কিছুটা ব্যাখ্যা করতে পারেন? কি করে .all?{|r|~r}? কি করে $_=?
মার্টিন থোমা

3
নমুনা রেখাটি চতুর এবং সমস্ত, তবে আমি মনে করি এটি লঙ্ঘন করে "এটি অবশ্যই সমস্ত অনুমোদিত চরিত্রের সমস্ত অনুমতি উত্পন্ন করতে সক্ষম হবে।" কোথাও এটি বলা হয় নি যে পাসওয়ার্ডে কেবলমাত্র চিঠিগুলি সম্পর্কিত বিজ্ঞাপন থাকতে পারে। Z যদি একটি অনুমোদিত অক্ষর হয় তবে পাসওয়ার্ডে z 0 থাকা একটি সুযোগ থাকা উচিত।
nitro2k01

1
\Wরুবিতে কি আন্ডারস্কোর অন্তর্ভুক্ত রয়েছে _? বেশিরভাগ রেজেক্স উপভাষায় আমি জানি এটি তা হয় না। এবং যদি আপনার কোডটি এমন পাসওয়ার্ড তৈরি করতে না পারে যেখানে _কেবলমাত্র একমাত্র অ-অক্ষর চিহ্ন থাকে, তবে এটি একটি প্রয়োজন লঙ্ঘন করবে। দ্বিতীয় পদ্ধতির খুব স্পষ্টতই সেই প্রয়োজনটিকে লঙ্ঘন করা হয়েছে তবে আমি অনুমান করি যে এটি তখন সঠিকভাবে বানানো হয়নি।
এমভিজি

1
@ এমভিজি: আপনি সঠিক বলেছেন। \Wপার্ল-সামঞ্জস্যপূর্ণ RegEx ( উত্স ) এ আন্ডারস্কোর নেই ।
মার্টিন থোমা

1
তদুপরি, আপনার সমাধানটি একই সমস্যার দ্বারা প্রভাবিত হয়েছে @ মুজ এবং আমি পাইথনের সাথে ছিলাম: sampleউপাদানগুলি পুনরাবৃত্তি করে না, তাই বারবারের উপাদানগুলির সাথে পাসওয়ার্ডগুলি আপনার কোড দ্বারা তৈরি করা যায় না your আপনি এই উত্তরটি প্রশ্নের সাথে সামঞ্জস্য করতে এই দুটি সমস্যা সমাধান করতে পারেন? ওল্ফ্রাম আলফা ব্যতীত আপনার কীভাবে শীর্ষস্থানীয় সমাধান তা দেখে, আপনি আনুগত্য করতে এবং এখনও নেতৃত্ব বজায় রাখতে পারবেন কিনা তা দেখে ভাল লাগবে। আমার ধারণা এটি খুব শক্ত হওয়া উচিত নয়।
এমভিজি

12

জাভা 8 - 354 329 319 275 267 টি অক্ষর

কেবল মজা করার জন্য, জাভা 8 এর সাথে ল্যাম্বডাস ব্যবহার করে - প্রতিটি সম্ভাব্য আউটপুটে একই রকম সম্ভাবনা পাওয়া যায় has

এটি অনুমোদিত অক্ষরগুলির ধারাবাহিকভাবে ascii কোডগুলি 33 থেকে 126 অবধি ব্যবহার করে uses

class A {
    //flags for, respectively, small caps, large caps, digits, punctuation
    static int a, A, d, p;

    public static void main(String[] x) {
        String s;
        do {
            //Using special String constructor that takes an int[]
            s = new String(new java.util.Random().ints(15, 33, 127)
                                .toArray(),
                           0, 15);
            a = A = d = p = 0;
            s.chars()
                .map(c ->
                      c > 96 & c < 123 ? a = 1
                    : c > 64 & c < 90  ? A = 1
                    : c > 47 & c < 58  ? d = 1
                    : (p = 1))
                .min();
        } while (a + A + d + p < 4);
        System.out.println(s);
    }
}

নমুনা আউটপুট:

.*;Tm?svthiEK`3  
o.dzMgtW5|Q?ATo  
FUmVsu<4JF4eB]1

সংকুচিত প্রোগ্রাম:

class A{static int a,A,d,p;public static void main(String[]x){String s;do{s=new String(new java.util.Random().ints(15,33,127).toArray(),0,15);a=A=d=p=0;s.chars().map(c->c>96&c<123?a=1:c>64&c<90?A=1:c>47&c<58?d=1:(p=1)).min();}while(a+A+d+p<4);System.out.println(s);}}


পরিবর্তে while(a+A+d+p<4)একসাথে কিভাবে ? বা ব্যবহার bitmasks মত অর্থাত কাপড় মাধ্যমে , সঙ্গে যেমন লুপ শর্ত। যদি আমি সঠিকভাবে গণনা করি তবে এটি আরও 13 টি অক্ষর সংরক্ষণ করে। a|=1a++a|=1a|=8a<15
এমভিজি

@ এমভিজি ভালো পয়েন্ট - আমি বিশ্বাস করি এমন কয়েকটি অতিরিক্ত অক্ষর সাশ্রয় করে এমনই কিছু করেছিলেন।
Assylias

@ এমভিজি এবং ব্যবহার new String(int[],int,int)করে আরও 40 টি বিজোড় অক্ষর সাশ্রয় হয়!
Assylias

8

পাইথন 2.X + 3.X (229 টি অক্ষর): উত্পন্ন এবং প্রতিস্থাপন

ধারণা

  1. প্রথমে 15 টি অনুমোদিত চিহ্ন সহ একটি তালিকা তৈরি করুন
  2. rএকটি এলোমেলো অঙ্ক দ্বারা একটি এলোমেলো অবস্থান প্রতিস্থাপন করুন
  3. একটি র্যান্ডম অবস্থান প্রতিস্থাপন sসঙ্গে s != r, একটি বড় হাতের অক্ষর দ্বারা
  4. লোয়ার কেস লেটার এবং প্রতীক হিসাবে একই হিসাবে 2 এবং 3।

কোড

from random import randint as r, shuffle as s
a=list(range(15))
p=a[:]
for i in range(15):
    a[i]=chr(r(32,126))
s(p)
a[p.pop()]=chr(r(48,57))
a[p.pop()]=chr(r(65,90))
a[p.pop()]=chr(r(97,122))
a[p.pop()]=chr(r(33,47))
print(a)

পাইথন 2.X + 3.X (194 অক্ষর): উত্পন্ন করুন এবং পরীক্ষা করুন

import random
from re import search as s
p=''
while not all([s("\d",p),s("[a-z]",p),s("[A-Z]",p),s("[\W_]",p)]):
 p=str(map(chr,[random.choice(list(range(33,127))) for i in range(15)]))
print(p)
  • ধন্যবাদ MvG যারা আমাকে বলছে যে \uএবং \lপাইথন Regex মধ্যে বিদ্যমান নেই।
  • জিআরসি কে ধন্যবাদ জানিয়েছিলেন যে আমাকে random.sampleপ্রতিস্থাপন ছাড়াই বলা হয়েছে , প্রতি সম্ভাব্য অনুমতিপ্রাপ্ত পাসওয়ার্ড পেতে আমাদের প্রতিস্থাপনের সাথে নমুনা দেওয়ার প্রয়োজন হয়।

সমস্যার বর্ণনায় ত্রুটি ব্যবহার করে

বর্তমানে, সমস্যার বিবরণটি দাবি করে না যে প্রতিটি প্রতীক / সংখ্যা একই সম্ভাবনার সাথে উপস্থিত হবে। নিম্নলিখিত সমাধানের সাহায্যে আপনি একটি একক প্রতীক এবং / অথবা অবস্থান সম্পর্কে কোনও ধারণা তৈরি করতে পারবেন না। তবে আপনি একাধিক লোকের সাথে এটি করতে পারেন।

পাইথন ২. এক্স + ৩ এক্স (characters২ টি অক্ষর)

from random import sample
print(sample("0123abcdABCD-+/<",15))

নমুনাটি ব্যবহার করার ধারণার জন্য ড্যানিরোকে ধন্যবাদ।


ত্রুটি খুঁজে খুব মসৃণ! আমি এটি প্লাগ করেছি, তবে এটি সনাক্ত করার জন্য বোনাস পয়েন্ট। :-)
হ্যান্ড-ই-ফুড

আপনার জেন এবং পরীক্ষা আমার পদ্ধতির অনুরূপ। কৌতূহলের বাইরে: \lপাইথন রেজেক্সেস নথিভুক্ত করার জন্য এটি কোথায় ? রেফারেন্স এ এটি দেখতে না । আমার পাইথন 3.3.3 এমনকি গ্রহণ করবে না "\u"str(…)পারেন 3.3.3 বা 2.7.6 অক্ষর যোগ দিতে পারবেন না। Optmization জন্য এক পরামর্শ: all(s("\\"+i,p)for i in "dluW")
এমভিজি

random.sampleপ্রতিস্থাপন ছাড়াই উপাদানগুলি চয়ন করে, তাই সমস্ত পাসওয়ার্ডই সম্ভব নয়।
grc

@ এমভিজি: আপনাকে ধন্যবাদ আমি সবেমাত্র তা দেখেছি \uএবং \lকেবলমাত্র ভিম is
মার্টিন থোমা

7

* নিক্সে বাশ করুন (109)

while ! grep -Pq [A-Z].*[a-z].*[0-9].*[\\W_]<<<$a$a$a$a
do a=`tr -dc !-~</dev/urandom|head -c15`
done
echo $a

সঠিকভাবে কাজ করতে, $aঅবশ্যই একটি বৈধ তবে অ-র্যান্ডম পাসওয়ার্ডের সামনে সেট করা উচিত নয়। আপনি যদি অন্তর্ভুক্ত করতে চান a=এবং একটি লাইন সামনে ব্রেক আপ করতে চান তবে এটি আরও তিনটি অক্ষর তবে এটি আপনাকে বারবার জিনিস চালাতে দেয়। আপনি স্পষ্টতই সমস্ত নিউলাইনগুলি প্রতিস্থাপন ;করতে পারেন যাতে আপনার কাছে একটি ওয়ান-লাইনার থাকে যা আপনি যতক্ষণ ইচ্ছা শুদ্ধ করতে পারেন।

তদ্ব্যতীত, আপনার LC_ALL=Cকোনও স্থানীয়-নির্দিষ্ট পরিবেশের ভেরিয়েবল ( LANGএবং LC_CTYPEবিশেষত) সেট করা বা না করা উচিত ছিল , যেহেতু অক্ষরের পরিসরটি কোলেশন অর্ডারের উপর নির্ভর করে ascii অর্ডারের সমান।

/dev/urandomএলোমেলো বাইটের উত্স। !-~প্রশ্নের মধ্যে বর্ণিত সমস্ত অনুমতিযোগ্য অক্ষরের ব্যাপ্তি। tr -dcসমস্ত অক্ষর সরিয়ে ফেলা হবে না তার পরবর্তী যুক্তি তালিকাভুক্ত। headবাকী 15 টি অক্ষর লাগে। grepপ্রয়োজনীয় প্রতিটি প্রকারের কমপক্ষে একবার ঘটে কিনা তা পরীক্ষা করে। এর ইনপুটটিতে প্রার্থীর চারটি অনুলিপি থাকে, সুতরাং প্রতীকগুলির ক্রমের বিষয়টি বিবেচনা করে না, সুতরাং সমস্ত সম্ভাব্য পাসওয়ার্ড বাছাইয়ের সুযোগ রয়েছে। -qশুষে আউটপুট grep করতে।

অজানা কারণে, /dev/randomপরিবর্তে /dev/urandomযুগে যুগে লাগে। দেখে মনে হচ্ছে এনট্রপি খুব দ্রুত ক্লান্ত হয়ে পড়েছে। আপনি যদি cdপ্রবেশ করেন তবে আপনি /devআরও কিছু বাইট এড়াতে পারবেন তবে এটি কিছুটা প্রতারণার মতো অনুভব করে।

পাইথন 2 (138)

import re,random
a=''
while not re.search('[A-Z].*[a-z].*[0-9].*[\W_]',a*4):
 a=''.join(random.sample(map(chr,range(33,127))*15,15))
print a

কোডটি পঠনযোগ্য করার জন্য আমি লুপের পরে একটি নতুন লাইন এবং ইন্ডেন্টেশন যুক্ত করেছি যা প্রয়োজনীয় নয় এবং যা আমি গণনা করি নি।

এটি মূলত ব্যাশ সংস্করণ হিসাবে একই ধারণা। এখানে এলোমেলো উত্স random.sample, যা উপাদানগুলির পুনরাবৃত্তি করবে না। এই বাস্তবতার মোকাবিলা করার জন্য, আমরা অনুমতিযোগ্য অক্ষরের তালিকার 15 টি অনুলিপি ব্যবহার করি। এইভাবে, প্রতিটি সংমিশ্রণটি এখনও ঘটতে পারে, যদিও পুনরাবৃত্ত অক্ষরগুলির সাথে এটি প্রায়শই ঘটে। তবে আমি এটিকে একটি বৈশিষ্ট্য হিসাবে বিবেচনা করার সিদ্ধান্ত নিয়েছি, কোনও বাগ নয়, যেহেতু প্রশ্নটির জন্য সমস্ত ক্রমুষ্ঠানের সমান সম্ভাবনার প্রয়োজন নেই, কেবল সম্ভাবনা।

পাইথন 3 (145)

import re,random
a=''
while not re.search('[A-Z].*[a-z].*[0-9].*[\W_]',a*4):
 a=''.join(random.sample(list(map(chr,range(33,127)))*15,15))
print(a)

একটি নতুন লাইন এবং একটি ইনডেন্ট আবার গণনা করা হয় না। পাইথন -3-নির্দিষ্ট সিনট্যাক্সের ওভারহেড ছাড়াও পাইথন 2 এর মতো একই সমাধান solution

জাভাস্ক্রিপ্ট (161)

a=[];for(i=33;i<127;)a.push(s=String.fromCharCode(i++));
while(!/[A-Z].*[a-z].*[0-9].*[\W_]/.test(s+s+s+s))
for(i=0,s="";i<15;++i)s+=a[Math.random()*94|0];alert(s)

আমি পঠনযোগ্যতার জন্য নতুন লাইনগুলি যুক্ত করেছি, তবে সেগুলি গণনা করি নি।

আর (114)

s<-""
while(!grepl("[A-Z].*[a-z].*[0-9].*(\\W|_)",paste(rep(s,4),collapse="")))
 s<-intToUtf8(sample(33:126,15,T))
s

লুপের অভ্যন্তরে লাইন ব্রেক এবং ইনডেন্টেশন যুক্ত হয়েছে তবে গণনা করা হয়নি। যদি আপনি এটির মতো অনুভব করেন তবে আপনি এটি আবার একটি একক- ;বিভক্ত লাইনে স্থানান্তর করতে পারেন ।


হা! আমি কেবল আপনাকে নির্দেশ করতে চলেছিলাম যে আপনি greplআপনার আর কোডটিতে ব্যবহার করতে পারতেন । কেবলমাত্র যদি আমি পরীক্ষার পাসওয়ার্ডটি চারবার পুনরাবৃত্তি করার কথা ভেবে থাকি তবে আপনি সমস্ত চেক একসাথে করতে পারতেন। এবং আপনি জানেন, কেবল যদি আমি সম্পর্কে চিন্তা করতাম sampleএবং intToUtf8। তবে, আপনার সমস্ত সম্ভাব্য পাসওয়ার্ড পাচ্ছেন তা নিশ্চিত করার জন্য আপনার নমুনা পদ্ধতিতে আপনাকে replace=TRUE(বা আরও সংক্ষিপ্তভাবে আপনাকে যুক্ত করতে হবে ,T) দরকার ।
অ্যামেলিয়াবিআর

@ অ্যামেলিয়াবিআর: আপনি ঠিক বলেছেন, replace=Tভুলটি ঠিক করেছেন, এটি নির্দেশ করার জন্য ধন্যবাদ thanks খোঁজা intToUtf8ট্যাব সমাপ্তির সঙ্গে সম্ভবত নাম মনন আমার বেশ কিছুদিনের নিলেন | আমি জানতাম যে এই জাতীয় কোনও ক্রিয়াকলাপের অস্তিত্ব আছে, তবে সাধারণ নামগুলি chrব্যবহার করা হয়নি।
এমভিজি

@ এমভিজি: আপনার পাইথন কোডটি কেন একেবারেই বন্ধ হয়ে গেছে তা আমি বুঝতে পারি না। তোমার এতো দরকার কেন *4? আমি ভেবেছিলাম আপনার রেজেক্স কোনও স্ট্রিংয়ের সাথে মিলে যাবে, সেই বিজ্ঞাপনটি প্রথমে একটি বড় হাতের অক্ষর, তারপরে কিছু, তারপরে একটি ছোট হাতের চিঠি, আমি কী ভুল পেয়েছি?
মার্টিন থোমা

@ মুজ: আপনি ইতিমধ্যে লক্ষ্য করেছেন যে, আমার রেজেক্স একটি নির্দিষ্ট ক্রমে প্রয়োজনীয় বিভাগগুলির জন্য পরীক্ষা করে। তবে বর্তমান প্রার্থীর চারটি অনুলিপি সংক্ষিপ্ত করে আমি নিশ্চিত করতে পারি যে আদেশটির আর কোনও গুরুত্ব নেই: এমনকি যদি আমার পাসওয়ার্ড চিহ্নগুলি হয় তবে তারপরে ছোট হাতের অক্ষরের পরে ছোট হাতের অক্ষর থাকে তবে তারপরেও একটি মিল থাকে। কোনও বিভাগ পুরোপুরি অনুপস্থিত থাকলে কোনও ম্যাচ ব্যর্থ হওয়ার একমাত্র উপায়। এছাড়াও নোট করুন যে আমি করি re.searchনা re.match, সুতরাং রেজেজেক্স প্রার্থীর পাসওয়ার্ডের যে কোনও জায়গায় মেলে। এটি ব্যাখ্যা করে যে এটি শেষ পর্যন্ত কেন শেষ হবে?
এমভিজি

আহ, আমি খেয়াল করিনি যে আপনি এর re.searchপরিবর্তে ব্যবহার করেন re.match। এটি ব্যাখ্যা করে। তবে আমি এখনও মনে করি আপনার দরকার নেই *4। ব্যাখ্যার জন্য আপনাকে ধন্যবাদ (+1)
মার্টিন থোমা

7

সি # ( 123 - 139 103 - 127 টি অক্ষর সংক্রামিত):

এতে পুরোপুরি পর্যাপ্ত কাঠামোর পদ্ধতি ব্যবহার করা System.Web.dll:

class P
{
    static void Main()
    {
        Console.WriteLine(System.Web.Security.Membership.GeneratePassword(15, 1));
    }
}

সন্নিবিষ্ট:

class P{static void Main()
{Console.WriteLine(System.Web.Security.Membership.GeneratePassword(15,1));}}

উদাহরণ:

b+m2ae0K:{dz7:A

বিকল্পভাবে, int numberOfNonAlphanumericCharactersকমান্ড লাইন থেকে দ্বিতীয় প্যারামিটার ( ) এর মান নিন :

class P
{
    static void Main(string[] a)
    {
        Console.WriteLine(System.Web.Security.Membership.GeneratePassword(15, int.Parse(a[0])));
    }
}

3
GeneratePasswordপ্রশ্নের মধ্যে নির্দিষ্ট চিহ্নগুলির সম্পূর্ণ সেট সমর্থন করে না। প্রত্যেকটি চরিত্র বিভাগের ন্যূনতম সংখ্যার বিষয়ে আমি কোনও গ্যারান্টি পাইনি।
এমভিজি 6'14

2
আপনি আরও ব্যবহার করে কমপ্যাক্ট করতে পারেন class Pএবং string[] a
d3dave

@ এমভিজি, এটি আকর্ষণীয়। দেখে মনে হচ্ছে এটি কোনও প্রতীক বাদ দেয় না যা সাধারণত ফরাসী ভাষায় ভাষায় উচ্চারণকৃত অক্ষর লিখতে ব্যবহৃত হয়। সম্ভবত একটি স্মার্ট পদক্ষেপ। আপনার পাসওয়ার্ড ভরাট করার জন্য কীবোর্ডের ভাষা পরিবর্তন করা যথেষ্ট।
হ্যান্ড-ই-ফুড

5

আর (301 322 অক্ষর)

সংশোধন অঙ্কের জন্য পরীক্ষা করতে ভুলে গেছেন।

a='abcdefghijklmnopqrstuvwxyz';
f=as.factor(strsplit(paste(a,toupper(a),
    sep="0123456789`~!@#$%^&*()_+-={}|[]\\:\";'<>?,./"),"")[[1]]);
g=gsub("(.):","\\1",levels(q:q:q:q:q:q:q:q:q:q:q:q:q:q:q));
repeat{p=g[runif(1)*length(g)]; 
    if(grepl("[A-Z]",p)&&grepl("[a-z]",p)&&grepl("[0-9]",p)&&grepl("[^A-Za-z0-9]",p))break;};
print(p);

(কেবল স্পষ্টতার জন্য সাদা স্থান যোগ করা হয়েছে)।

94 টি চরিত্রের সমস্ত 15-অক্ষরের ক্রম বিভাজন তৈরি করে। তারপরে এটি এলোমেলোভাবে একটি নির্বাচন করে যতক্ষণ না এটি মানদণ্ডের সাথে মেলে।

ম্যাজিকটি q:qঅপারেশনে রয়েছে, যা একটি নতুন ফ্যাক্টর ডেটা টাইপ উত্পন্ন করে যা প্রথম qতালিকার সমস্ত কারণগুলির সাথে দ্বিতীয় তালিকার সমস্ত কারণের সাথে ইন্টারঅ্যাকশন এবং সেই দুটি তালিকার প্রতিটি সম্ভাব্য সংমিশ্রণের সাথে তালিকার তালিকায় অন্তর্ভুক্ত রয়েছে " স্তর "যে ফ্যাক্টর। অনুমোদিত অক্ষরের তালিকার 15 অনুলিপি ইন্টারঅ্যাক্ট করুন এবং আপনি (94 ^ 15) সম্ভাব্য স্তর পাবেন।

দয়া করে বাড়িতে এটি চেষ্টা করবেন না। তিনটি অক্ষরের ক্রমবিধি নির্ধারণের জন্য কোডটি কয়েক সেকেন্ড সময় নেয়, আমি সত্যই কল্পনা করতে পারি না যে আপনার কম্পিউটারে কেবল স্মৃতিশক্তি শেষ না হলে 15-অক্ষরের সমস্ত অনুমানটি বের করতে কত সময় লাগবে I ইতোমধ্যে। আমি এটি (ত্রি-চরিত্রের পাসওয়ার্ড) পরীক্ষা করার জন্য স্ক্রিপ্টটি চালিয়েছিলে, প্রথম পাসওয়ার্ডটি এটি ছড়িয়ে পড়েছিল "oO =", যা আমি মনে করি যে এই কোডটিতে আপনার কী প্রতিক্রিয়া দেখা উচিত su


@ এমভিজির একটি আর স্ক্রিপ্ট রয়েছে যা অনেক বেশি ব্যবহারিক এবং আরও কম খাটো, যদি খুব কম ভয়ঙ্কর হয় তবে: কোডগলফ.স্ট্যাকেক্সেঞ্জাংআআআআ
অ্যামেলিয়াবিআর

তবুও, আমি আপনার ধারণা পছন্দ করি। অনেক কোড-গল্ফ স্নিপেটগুলি আমি দেখেছি ভাষার নির্দিষ্ট বৈশিষ্ট্যগুলি কঠোর পরিশ্রম করতে দেয়। এবং আপনার কোড অবশ্যই আর এর জন্য এটি করে those
এমভিজি

4

গণিত 170

r=RandomSample;f[i_]:=(FromCharacterCode/@Range@@i);
{t,A,a,n}=f/@{{33,126},{65,90},{97,122},{48,57}};
s=Complement[t,A,a,n];
""<>r[Join[RandomChoice/@{A,a,n,s},r[t,11]],15]

উদাহরণ

"<]} পিজি 3 / ই? 3 + জেড ~ ওজ"
"এক্স / 8জেডাব্লুও @ f (_x5P: ="
"2wz2VQhtJC? * আর 7 ^"


4

পাইথন ২.7 (182)

import random as r,string as s
z=r.sample
j=list(z(s.ascii_lowercase,12)+z(s.ascii_uppercase,1)+z(s.digits,1)+z('`~!@#$%^&*()_+-={}|[]\\:";\'<>?,./',1))
r.shuffle(j)
print ''.join(j)

সমস্যাটি বর্ণনার দ্বারা আবশ্যক না হওয়ায় আপনি যোগদানটি সরিয়ে 9 টি সংখ্যা কম পেতে পারেন। স্পেসগুলি সরিয়ে আরও 2 টি কম।
মার্টিন থোমা 5'14

@moose আমি স্পেস বের করে ডান আগে আপনার মন্তব্য করার :-) আমি মত মনে joinধরণ সেখানে হতে আছে: হায় ব্যবহারকারীদের আউটপুট থেকে পাইথন তালিকা সিনট্যাক্স বুঝতে হবে বলে আশা করা: ['q', 'u', ...]?
জোনাথন রাইনহার্ট

1
আমি আদৌ মুদ্রণ অপসারণ সম্পর্কে ভেবেছিলাম। বাইটের আকার যখন গুরুত্বপূর্ণ, তারা পাঞ্চ কার্ডের সময় থাকতে পারে। এইভাবে, তারা স্মৃতিটি পড়তে সক্ষম হতে পারে ... কেবল এটি দেখে। বা তারা "বাস্তব প্রোগ্রামার": xkcd.com/378
মার্টিন থোমা

1
আমি যদি কোডটি সঠিকভাবে পড়ছি, তবে এটি সমস্ত ক্রমের প্রয়োজনীয়তা পূরণ করে না , এতে সর্বদা 12 ছোট ছোট অক্ষর থাকবে, অন্য দলের (যেমন aA$bc1111111111) একের বেশি সংখ্যক দিয়ে পাসওয়ার্ড তৈরি করা অসম্ভব।
আইকিউআন্দ্রেয়াস

1
জনাথনের প্রতিরক্ষায়, আমি মনে করি যে তার পোস্টের 5 মিনিট পরেই আদেশের বিধি যুক্ত করা হয়েছিল।
হ্যান্ড-ই-ফুড

4

গল্ফস্ক্রিপ্ট (60)

যেহেতু বাধ্যতামূলক। গল্ফস্ক্রিপ্ট অনুপস্থিত এবং একটি নুব হিসাবে আমার যেভাবেই অনুশীলন প্রয়োজন :)

[48 10{rand}:r~+65 26r+97 26r+33 15r+11,{;32 96r+}%~]{r}$''+

এটি কেবলমাত্র 4 টি প্রয়োজনীয় 11 টি এলোমেলো অক্ষর এবং এলোমেলো ক্রমে সাজানোর সাথে একটি অ্যারে তৈরি করে।


জন্য +1 {r}$। তালিকাটি বদল করার এটি বেশ নোংরা উপায় - এটি আমার পছন্দ! ;-)
ইলমারি করোনেন

... তবে আমি মনে করি না এই যা করতে পারেন কি কখনো আউটপুট যেমন না 0Aa~~~~~~~~~~~~। :-(
ইলমারি করোনেন

3

জাভাস্ক্রিপ্ট 258 240 233 225

R=Math.random;a=b=>b[b.length*R()|0];for(x=[a(l="abcdefghijklmnopqrstuvwxyz"),a(u=l.toUpperCase()),a(n="0123456789"),a(s="`~!@#$%^&*()_+-={}|[]\\:\";'<>?,./")];15>x.length;x.push(a(l+u+n+s)));alert(x.sort(y=>.5-R()).join(""))

একটি নিয়ম ব্যবহার করে যেখানে:

function(x){return x*x}হিসাবে আবার লেখা যেতে পারে function(x)x*x। কেবল একটি মান ফেরত ফাংশনগুলির জন্য কাজ করে বলে মনে হচ্ছে।

পরবর্তী পুনরাবৃত্তিতে, হ্রাস x.sort(function().5-R())করারx.sort(y=>.5-R())

পরবর্তী পুনরাবৃত্তি, চর্বিযুক্ত তীর চিহ্ন সহ আরও কমিয়ে দেওয়া হয়েছে, যা দুঃখজনকভাবে কেবল ফায়ারফক্স ২২ এবং তারপরের জন্য কাজ করে।


চমৎকার কম্প্যাক্টিং! : ডি
আইকিউ অ্যান্ড্রেয়াস

2

জাভাস্ক্রিপ্ট (269 টি অক্ষর সংক্রামিত)

স্পষ্টতার জন্য, আমি এটির জেএস-ফিডলটি কমপ্যাক্ট করার আগে এই কোড :

var lowerLetters = "abcdefghijklmnopqrstuvwxyz";
var upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numbers = "0123456789";
var symbols = "`~!@#$%^&*()_+-={}|[]\\:\";'<>?,./";
var allCharacters = lowerLetters + upperLetters + numbers + symbols;

String.prototype.randomChar = function() {
    return this[Math.floor(this.length * Math.random())];
}

var minLength = 15;
var result = [];

// Start off by picking one random character from each group
result.push(lowerLetters.randomChar());
result.push(upperLetters.randomChar());
result.push(numbers.randomChar());
result.push(symbols.randomChar());
// Next, pick a random character from all groups until the desired length is met
while(result.length < minLength) {
    result.push(allCharacters.randomChar());
}
result.shuffle(); // Finally, shuffle the items (custom function; doesn't actually exist in JavaScript, but is very easy to add) -> http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
result.join("");

এখানে এটি 269 টি অক্ষরে কমপ্যাক্ট করা হয়েছে (এর জেএস-ফিডাল ):

l="abcdefghijklmnopqrstuvwxyz";
u=l.toUpperCase();
n="0123456789";
s="`~!@#$%^&*()_+-={}|[]\\:\";'<>?,./";
R=Math.random;

function r(t){
    return t[~~(t.length*R())]
}

for(x=[r(l),r(u),r(n),r(s)];x.length<15;x.push(r(l+u+n+s)));
x.sort(function(){return .5-R()});
alert(x.join(""));

যেহেতু আমি আধা-কলোন দিয়ে রেখাগুলি শেষ করছি, সমস্ত অপসারণযোগ্য শ্বেত স্পেস অক্ষর গণনার জন্য উপেক্ষা করা হয়েছিল, তবে স্পষ্টতার জন্য রেখে গেছে।
আইকিউ আন্দ্রেয়াস

shuffle()"কাস্টম ফাংশন" হওয়ার অর্থ কী ? এটি কি জাভাস্ক্রিপ্ট বা কোডের একটি অংশ আপনার নিজেরাই লিখতে হবে?
হ্যান্ড-ই-ফুড

@ হ্যান্ড-ই-ফুড আমার অর্থ এটি জাভাস্ক্রিপ্টে নির্মিত হয়নি, এবং যেহেতু এখানের যে কোনও বিকাশকারীকে কীভাবে অ্যারে বদলানো উচিত তা জানা উচিত, তাই আমি কোডটির ফাংশনটি সহ অপ্রয়োজনীয় বোধ করলাম। এটি জেএস-ফিডলে যদিও উপলব্ধ (লাইন 16)।
আইকিউআন্দ্রেয়াস

1
আমার বক্তব্যটি হ'ল এটি আপনার বাইট-কাউন্টের পক্ষে গণনা করে। তবে আমি এখন দেখছি আপনি এটি সংক্ষেপিত সংস্করণে প্রয়োগ করেছেন, সুতরাং দয়া করে আমাকে উপেক্ষা করুন। :-)
হ্যান্ড-ই-ফুড

2

ক্লোজার ()৩):

(->> (map char (range 33 127)) (shuffle) (take 15) (apply str))

তবে প্রতিটি বিভাগের ন্যূনতম 1 টি অক্ষর (উচ্চ, নিম্ন, সংখ্যা, চিহ্ন) রয়েছে তা নিশ্চিত করতে উন্নত করা দরকার need


2

SQL সার্ভারে

declare @a nvarchar(28)
set @a='abcdefghijklmnopqrstuvwxyz'
declare @b nvarchar(max)
set @b='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
declare @c nvarchar(max)
set @c='0123456789'
declare @d nvarchar(max)
set @d='~!@#$%^&*()_+-={}|[]\:";<>?,./'

select left(substring(@a,cast(rand()*10 as int),3)+substring(@b,cast(rand()*10 as int),6)+substring(@c,cast(rand()*10 as int),3)+substring(@d,cast(rand()*10 as int),5),15)

এটি কর্মে দেখুন - 1

এটি অ্যাকশন - 2 এ দেখুন


1
শেষ লাইনটি অনুসরণ করতে আমার সমস্যা হচ্ছে, তবে কোডটি সমস্ত অনুমতি সংক্রান্ত প্রয়োজনীয়তা পূরণ করছে বলে মনে হচ্ছে না ।
আইকিউ আন্দ্রেয়াস

আপনার কোড কখনই শুরু করে এমন কোনও পাসওয়ার্ড তৈরি করবে না ~0Aaবা bএরপরে কোনও পাসওয়ার্ড তৈরি হবে না a
হেইনজি

@ হাইঞ্জি: হ্যাঁ, আমি সম্মত হ'ল প্রয়োজনীয় সমস্ত অনুমতি বিবেচনায় নেওয়া হয়নি, এটি কেবল একটি 15 দৈর্ঘ্য দেখায় .c ..
ভাদালগি

2

এসএএস (১৯১)

%macro c(p);compress(p,,"&p")ne''%mend;data x;length p$15;do x=1by 1;do t=1to 15;substr(p,t,1)=byte(ranuni(7)*94+33);end;if %c(kd)and %c(kl)and %c(ku)and %c(ad)then do;put p;stop;end;end;run;

*TQP,(f=h10*)S=

মন্তব্য / ইন্ডেন্টযুক্ত:

%macro c(p); /*compress removes or keeps certain classes of characters*/
  compress(p,,"&p")ne''
%mend;
data x;
length p$15;
do x=1by 1;
    do t=1to 15;
        substr(p,t,1)=byte(ranuni(7)*94+33); /*give it a 33-126, byte discards the noninteger portion rounding down*/
    end;
    if %c(kd)and %c(kl)and %c(ku)and %c(ad)then do; /*k=keep d=digit l/u=lower/upper ad=remove digits and alphas*/
        put p;
        stop;  /*met our requirement, head home*/
    end;
end;
run;

2

পাওয়ারশেল: 119

গোফলেড কোড

for(;!($x-cmatch'.*(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!-/:-@[-`{-~]).*')){$x='';1..15|%{$x+=[char](33..126|random)}}$x

আন-গল্ফড এবং মন্তব্য করা হয়েছে

# Start for loop definition.
for(
    # Skip variable initialization, start definition of run condition.
    ;
    # Loop runs if $x does not meet complexity requirements.
    # Length requirement is not tested here because it is enforced by the generator later.
    # Much thanks to @VasiliSyrakis for the RegEx help.
    !($x-cmatch'.*(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!-/:-@[-`{-~]).*')
)
{
    # Reset $x in case the script block has already run.
    $x='';
    # Use ForEach-Object, via the % alias, to run a loop 15 times.
    1..15|%{
        # Append a random ASCII character from 33-126 to $x.
        # Note: Use get-random instead of random for faster performance.
        $x+=[char](33..126|random)
    }
}
# Display $x.
$x
# Variable cleanup - not included in golfed code.
rv x

আমি মনে করি এই রেজেক্স এটিকে এতটা ছোট করে তুলতে পারে: ^.*(?=.{15,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!#$%&? "]).*$আপনি এটির সাথে একটি ম্যাচ করতে পারেন, যা কেবল তখনই মিলবে যখন একটি ওপরের, লোয়ার, ডিজিট, সিম্বল থাকবে।
ভাসিলি সিরিাকিস

@ ভ্যাসিলি সাইরাকিস ঠিক আছে, আপনাকে আমাকে কিছুটা পথ যেতে হবে। আপনি যদি মনে করেন যে এটি কিছুটা সময় নেবে তবে নিখরচায় একটি চ্যাট রুম শুরু করুন। কয়েকটি বিষয় যা সম্পর্কে আমি বিভ্রান্ত হয়েছি: ১) আমি সেখানে 15 নম্বর অন্তর্ভুক্ত দেখতে পাচ্ছি। স্ট্রিংটি ঠিক 15 টি অক্ষর কিনা তা নিশ্চিত করার জন্য? যদি তা হয় তবে এটিকে বাদ দেওয়া যেতে পারে, যেহেতু স্ক্রিপ্টটি স্বাভাবিকভাবে কেবল 15-অক্ষরের স্ট্রিং তৈরি করে। ২) আপনার উচ্চারণ, লোয়ার, ডিজিট, সিম্বল থাকবে এমন কি কেবল তখনই মিলবে? এর অর্থ কি এটি কেবল তখনই মিলবে যখন প্রতিটির ঠিক একটি, বা কমপক্ষে একটির রয়েছে? প্রাক্তন জিনিস ভাঙ্গবে।
ইসজি

এছাড়াও, আপনার রেজিএক্স অক্ষরের ক্রমকে অগ্রাহ্য করে? উদাহরণস্বরূপ, যদি 4-বর্ণের স্ট্রিংগুলি মেলাতে টিউন করা হয়, তবে উভয়ই মিলবে 1aZ%এবং (p3Rমিলবে? অনলাইনে এটি করার উপায়গুলি খুঁজে পেতে আমার কিছুটা সমস্যা হয়েছিল।
ইসজি

আমার বর্তমান স্ক্রিপ্ট থেকে আউটপুট বিরুদ্ধে নতুন RegEx পরীক্ষিত। এটি বেশ নির্ভরযোগ্য বলে মনে হয় না। কোড: $x-cmatch'^.*(?=.{15,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!#$%&? "]).*$'ভাল ম্যাচ: C>suD1?hTwbDx(z j%4O]HyeG|u[U$5 O/rGeD0$hJk=GO/ব্যর্থ ম্যাচ: 3evthX3_X^nBrR` .এনএ Y uYzrR4YV-r.`u-IjZE48ntQ;HxV
ইসজি

আমি কীভাবে চ্যাট রুম খুলব?
ভাসিলি সিরিাকিস

1

পাইথন ২.7 (১৪৯)

from random import*
''.join(map(lambda x:chr(randint(*(x[1]or(32,126)))),sorted(map(None,sample(range(15),15),((48,57),(65,90),(97,122),(33,47))))))

আরও পাঠযোগ্য (এবং কার্যকরযোগ্য নয়) উপায়ে লিখিত;

from random import *
''.join(                                          # Concatenate characters to string
  map(                                            # Map all characters using below lambda
    lambda x:chr(randint(*(x[1] or (32, 126)))),  # Map a single range to a random character
                                                  # within a specific range if supplied,
                                                  # otherwise the default "all" range.
    sorted(                                       # After distributing ranges, sort
      map(None,                                   # zip_longest alternative, distributes the
                                                  # required ranges over 4 random positions
        sample(range(15), 15),                    # 0-14 in random order
        ((48, 57), (65, 90), (97, 122), (33, 47)) # The 4 required ranges
      )
    )
  )
)

মোটামুটি সোজা এগিয়ে এবং আশ্চর্যজনকভাবে "জেনারেট করুন, ম্যাচে ব্যর্থ হওয়ার চেষ্টা করুন" সংস্করণটির চেয়ে বেশি দীর্ঘ নয় longer


আপনি কি নিশ্চিত যে এগুলি উদাহরণস্বরূপ সমস্ত যোগ্য পাসওয়ার্ড তৈরি করতে পারে 0Aa~~~~~~~~~~~~? (দ্রষ্টব্য '~' == chr(126)।)
ইলমারি করোনেন


1

পিএইচপি, 235 225

পাসওয়ার্ডটি শক্তিশালী (বা এটি পুনরায় জেনারেট হয়েছে) তা নিশ্চিত করার জন্য এই স্ক্রিপ্টটি চারপাশে অক্ষরগুলি পরিবর্তন করে এবং তারপরে RegEx- এর মাধ্যমে পরীক্ষা করা হয়।

<?php
while(!preg_match('/^(?=.*[A-Z])(?=.*[^A-Za-z])(?=.*[0-9])(?=.*[a-z]).{15}$/',$p)){ $p = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_+-={}|[]\:";\'<>?,./'),0,15); }
echo $p;

1
চালাক, তবে সদৃশ অক্ষরের অনুমতি দেয় না।
হ্যান্ড-ই-ফুড

1
পরিবর্তে while(true) ... if (condition) breakআপনি ব্যবহার করতে পারেনwhile (!condition)
এক্সেসাম

1

জাভাস্ক্রিপ্ট (209)

r=Math.random;function t(x,y){return String.fromCharCode(Math.floor(y*r()+x))};x=[t(33,14),t(48,10),t(65,26),t(97,26)];for(i=0;i<11;i++)x.push(t(32,95));console.log(x.sort(function(){return r()-0.5}).join(''))

সেমি-ungolfed;

// Return a character in the range [x,x+y)
function t(x,y) { return String.fromCharCode(Math.floor(y*Math.random()+x)) }
// Prefill required ranges
x=[ t(33,14), t(48,10), t(65,26), t(97,26)]
// Push 11 totally random (valid) characters
for(i=0; i<11; i++)
  x.push(t(32,95))
// Shuffle and output as string
console.log(x.sort(function(){return Math.random()-0.5})
             .join(''))

1

পার্ল, 92

রুবির উত্তরের মতো সংক্ষিপ্ত নয়, তবে আমি নিশ্চিত যে পার্ল উইজার্ড এটিকে আরও ছোট করে তুলতে পারে ... আমি m//শেষের দিকে সমস্ত ক্ষেত্রে খুব বেশি খুশি নই , তবে কাজ করে যাচ্ছি বলে মনে হচ্ছে এবং অবশেষে উত্পন্ন হওয়ার শর্তটি পূরণ করতে হবে সমস্ত আদেশ।

do{$_=join"",map{(map{chr}33..127)[rand 94]}0..14}while!(/[A-Z]/&/[a-z]/&/\d/&/[\W_]/);print

নমুনা ব্যবহার:

perl -e 'do{$_=join"",map{(map{chr}33..127)[rand 94]}0..14}while!(/[A-Z]/&/[a-z]/&/\d/&/[\W_]/);print'

বৈধতা স্থির করতে সম্পাদিত এবং এমভিজির মন্তব্যের পরে পরিবর্তিত [[:punct:]]হয়েছে [\W_]


1
আপনার প্রজন্মের অংশটি দুর্দান্ত, তবে লুপের অবস্থাতে আপনার নির্বাচনের মানদণ্ডটি সম্পূর্ণ ভুল: যেমন একটি পাসওয়ার্ডের aaaaaaaaaaaaaaফলে লুপটি বন্ধ হয়ে যায় ate আপনি যা চান তা তারা নিশ্চিত করে তা নিশ্চিত করার জন্য আপনার এলোমেলো পাসওয়ার্ডগুলির সাথে মানদণ্ড পরীক্ষা করা উচিত।
এমভিজি

সত্যই, আপনি সঠিক, আমি এটি স্থির করেছি এবং কিছু বাইট সংরক্ষণ করেছি! ধন্যবাদ!
ডম হেস্টিংস

1
আপনি কি এ সম্পর্কে নিশ্চিত [[:punct:]]? আমার ধারণা আমি পছন্দ করতাম '[\ W_] , which is shorter and of which I'm even more sure that it is correct, at least combined with your 33..127` ব্যাপ্তি।
এমভিজি

একটি ভাল বিষয়, আমি মনে করি যে আমি উদ্বিগ্ন যেটি \Wঅন্তর্ভুক্ত ছিল না _, তবে আপনি একেবারে সঠিক, এটির প্রয়োজন নেই: gist.github.com/anonymous/8301237 । ধন্যবাদ!
ডম হেস্টিংস

1

জাভা 7 ( 270 234 টি অক্ষর)

অনুমানটি জাভা 8 (@ বৈধ পাসওয়ার্ড পর্যন্ত এলোমেলো পাসওয়ার্ড উত্পন্ন) এর সাথে @Asslias দ্বারা ব্যবহৃত একইরকম। তবে ল্যাম্বডাস ব্যবহার না করে পাসওয়ার্ডটি চার অ্যারের পুনরাবৃত্তি করে তৈরি করা হয় এবং একটি রেজেক্সের সাথে ম্যাচ করে বৈধ করা হয় ated

class A {
  public static void main(String [] a) {
    byte[] b = new byte[15];
    String s;
    do {
      new java.util.Random().nextBytes(b);
      s = new String(b);
    } while(!s.matches("(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\\d)(?=.*?[!-/:-@\\[-`]).*"));
    System.out.println(s);
  }
}

Minified কোড:

class A {public static void main(String[] a){byte[] b=new byte[15];String s;do{new java.util.Random().nextBytes(b);s=new String(b);}while(!s.matches("(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\\d)(?=.*?[!-/:-@\\[-`]).*"));System.out.println(s);}}

1

শক্তির উৎস


ওয়ান লাইনার সংস্করণ (143 বাইট)

sal g random;1..11|%{$P+=[char](33..126|g)};(65..90|g),(97..122|g),(48..57|g),(33..47+58..64+123..126|g)|%{$P=$P.insert((1..11|g),[char]$_)};$P

মিনি সংস্করণ (146 বাইট)

sal g random
1..11|%{$P+=[char](33..126|g)}
(65..90|g),(97..122|g),(48..57|g),(33..47+58..64+123..126|g)|%{$P=$P.insert((1..11|g),[char]$_)}
$P

পঠনযোগ্য সংস্করণ (860 বাইট)

function pwgen {

    # Fulfill Upper,Lower,Digit,Symbol requirement by predefining ASCII ranges for each
    # These will be added into the string beginning at line 24

    [array[]]$symbolrange = (33..47),(58..64),(123..126)

    [char]$upper = (get-random (65..90))
    [char]$lower = (get-random (97..122))
    [char]$digit = (get-random (48..57))
    [char]$symbol = $symbolrange | get-random

    [char[]]$requirement = $upper + $lower + $digit + $symbol

    # Create the first 11 characters using any ASCII character between 32 - 126

    foreach ($number in (1..11)) {
        [string]$pass += [char](get-random (33..126))
    }

    # Insert each requirement character at a random position in the string

    foreach ($char in $requirement) {
        [string]$pass = $pass.insert((Get-Random (1..11)),$char)
    }

    return $pass
}

কোডটি ছোট করার জন্য বিভিন্ন টিপসের জন্য ইজিকে ক্রেডিট করুন।


1
এটি সমস্ত আদেশকে কভার করে না। উদাহরণস্বরূপ, abcd1234ABCD{|}~কখনই আসবে না কারণ $symbolASCII 33 এবং 47 এর মধ্যে কমপক্ষে একটি প্রতীককে জোর করে তোলে
হ্যান্ড-ই-ফুড

ধূর! তুমি কি আমার অলসতার পরিচয় দাও !? মজা করছি ... আমি এখন এটি সম্পাদনা করেছি। আমি প্রতিটি "প্রয়োজনীয়তা" অক্ষরটিকে একই সূচীতে চারটি একসাথে রেখে পরিবর্তনের পরিবর্তে স্ট্রিংয়ের মধ্যে একটি পৃথক সূচীতে যেতে পারি। এখন কেবল যদি আমি এটি সংক্ষিপ্ত করতে পারতাম ...
ভাসিলি সিরিাকিস

সংক্ষিপ্ত করে $SRআপনি আরও কয়েকটি চরিত্র শেভ করতে পারবেন না এমন কোনও কারণ আছে কি $Q?
ইসজি

আপনার উপনামটি ব্যবহার করে লুপগুলিতে বিবৃতি দেওয়ার (g(65..90))জন্য 65..90|g'. And change the নীচের মতো স্টাফগুলি কাটাতে সক্ষম হওয়া উচিত । উদাহরণ: ... যেমন করা সম্ভব হওয়া উচিত ... । আমি নিশ্চিত যে অন্যান্য অপ্টিমাইজেশন রয়েছে যা সম্ভব, তবে আমি আসলে সম্পূর্ণ ভিন্ন বাস্তবায়নটি পেয়েছি যা আমি পরে চেষ্টা করার পরিকল্পনা করছি। foreach-object%foreach($N in (1..11)){}1..11|%{}
ইসজি

দুর্দান্ত টিপস :) আমি যদি গাড়ীর রিটার্ন বের করি এবং সেমিকোলনগুলি প্রতিস্থাপন করি তবে আমি এটি 213 বাইটে সংক্ষিপ্ত করে রেখেছি।
ভাসিলি সিরিাকিস

1

ফ্যাক্টর, 196 টি অক্ষর

এমভিজি এবং মুজ হিসাবে একই অ্যালগরিদম। এটি সংক্ষিপ্ত নয় তবে প্রশ্নের সমস্ত (বর্তমান) মানদণ্ডটি পূরণ করা উচিত:

USING: io kernel math pcre random sequences sequences.repeating ;
[ 15 94 random-integers [ 33 + ] "" map-as dup 60 cycle
"[A-Z].*[a-z].*[0-9].*[\\W_]" findall { } = not ] [ drop ] until print

আমি হয়ত রেজেক্সের ভুল ব্যাখ্যা দিচ্ছি, তবে আমার মনে হয় এরকম কিছু ~{}|1234abcdABCDরেজেক্সকে ব্যর্থ করবে।
হ্যান্ড-ই-ফুড

1
না এটি কাজ করবে না:"~{}|1234abcdABCD" 60 cycle "[A-Z].*[a-z].*[0-9].*[\\W_]" findall empty? not => t
Björn Lindqvist

আমি আপনার জন্য এটি গ্রহণ করব। :-)
হ্যান্ড-ই-ফুড

1

সি - 154 টি অক্ষর

char p[16],c,f,w;main(){srand(time());while(f^15){c=p[15]=f=0;while(c^15){w=33+rand()%94;f|=w
>96&&w<123?1:w>47&&w<59?2:w>64&&w<91?4:8;p[c++]=w;}}puts(p);}

আমি কীভাবে ঘৃণা করব srand()? আমাকে রাস্তাটা বলুন।


1

হাস্কেল, 192

import System.Random
main=getStdGen>>= \g->(print.(take 15))$until((\x->all(any(`elem`x))[['a'..'z'],['A'..'Z'],['0'..'9'],['!'..'/']++":;<=>?@[\\]^_`{|}~"]).(take 15))tail$randomRs('"','~')g

মুদ্রিত স্ট্রিংটির চারপাশে উদ্ধৃতি রয়েছে এবং ব্যাকস্ল্যাশ এবং উদ্ধৃতি অক্ষরগুলি থেকে বেরিয়ে যায়; যদি তা অগ্রহণযোগ্য হয় তবে আরও 3 বাইটের জন্য printপ্রতিস্থাপন করা যেতে পারে putStrLn। এখানে আরও পাঠযোগ্য সংস্করণ:

import System.Random

main = do
    g <- getStdGen
    let chars = randomRs ('"', '~') g
    let password = take 15 $ until (hasChars.(take 15)) tail chars
    print password

hasChars :: String -> Bool
hasChars x = all (any (`elem` x)) $
    [ ['a'..'z']
    , ['A'..'Z']
    , ['0'..'9']
    , "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
    ]

এটা বেশ সহজবোধ্য এটা শুধু সীমার মধ্যে র্যান্ডম ASCII অক্ষর অসীম / অলস তালিকা তৈরি করে, '!'করতে '~', তারপর প্রথম উপাদান আউট tosses পর্যন্ত প্রথম 15 অক্ষর প্রয়োজনীয় অক্ষর প্রতিটি পংক্তি থেকে অন্তত একটি অক্ষর আছে।


1

এক্সেল ভিবিএ, 209 বাইট

For i = 1 To 15
x = x + Chr(Int(90 * Rnd + 33))
Next
p = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$"
With New RegExp
.Pattern = p
Set m = .Execute(x)
If m.Count = 0 Then
MsgBox "redo"
Else
MsgBox x
End If
End With

এলোমেলোভাবে 15 ASCII অক্ষর উত্পন্ন করে যাতে সমস্ত সম্ভাব্য সংমিশ্রণগুলি সম্ভব। তারপরে এটিতে প্রতিটি মানদণ্ডের কমপক্ষে একটি রয়েছে কিনা তা পরীক্ষা করতে একটি নিয়মিত প্রকাশের প্যাটার্ন ব্যবহার করে।

যদি এটি হয় তবে পাসওয়ার্ড প্রদর্শিত হবে, যদি না হয় তবে "পুনরায়" প্রদর্শিত হবে না।

নিয়মিত এক্সপ্রেশন প্যাটার্নের জন্য বার্ট কায়ার্সকে ক্রেডিট: https://stackoverflow.com উচ্চতর


0

অটোহটকি 352

global o:={}
loop 4
o[c()]:=o(A_index-1)
loop 11
o[c()]:=o(m(r(),4))
loop 15
s.=o[A_index-1]
msgbox % s
r(){
Random,z
return z
}
m(z,r){
return mod(z,r)
}
c(){
while o[t:=m(r(),15)]!=""
j++
return t
}
o(f){
r0:=48,l0:=10,r1:=97,l1:=l2:=26,r2:=65
r := chr(r%f%+m(r(),l%f%))
if f=3
r:=Substr("``~!@#$%^&*()_+-={}|[]\:"";'<>?,./",m(r(),32)+1,1)
return r
}

ব্যবহার - কেবল স্ক্রিপ্টটি চালান


0

পাইথন (121 টি অক্ষর)

আপনি পাইথনে [১,২,৩] * ২ টি তালিকাকে গুণিত করতে পারেন এই বিষয়টি ব্যবহার করে [২,২,৩,১,২,৩]। আমদানি এলোমেলো। তিনটি দ্বারা গুণিত একটি তালিকার সংখ্যাগুলি প্রয়োজনীয় অক্ষরের জন্য ascii টেবিলের রেঞ্জের মধ্যে সীমানা, যেমন [65, 90] বড় হাতের অক্ষরের মানচিত্র।

print "".join([random.choice([chr(i) for i in range(z[0],z[1])]) for z in [[33,48],[48,58],[58,65],[65,90],[90,123]]* 3])

1
"এটি অবশ্যই অনুমতিযোগ্য সমস্ত অক্ষরের সমস্ত ক্রম উত্পন্ন করতে সক্ষম হবে"। আমার মনে হয় না যেহেতু রেঞ্জগুলি সর্বদা একই ক্রমে প্রয়োগ করা হয় ...?
জোছিম ইসাকসন

আপনি ঠিক বলেছেন, ধন্যবাদ। প্রকৃতপক্ষে আমি খেয়াল করিনি যে রেঞ্জগুলি এলোমেলো ক্রমে প্রয়োগ করা উচিত, তাদের এলোমেলো করা উচিত, আমি এক মুহুর্তে এটি সম্পাদনা করব।
পাভেল্মহ্ম

এটি আসলে import randomকোড অন্তর্ভুক্ত করা প্রয়োজন ।
মেগো

0

পিএইচপি 5.5 (230 বাইট)

echo preg_replace_callback('/./', function ($a)
{
  return chr([rand(33, 126), rand(48, 57), rand(65, 90), rand(97, 122), ord(str_shuffle('`~!@#$%^&*()_+-={}|[]\:";\'<>?,./')[0])][$a[0]]);
}
, str_shuffle(str_pad('1234', 15, 0)));

বা এক লাইনে (211 বাইট)

echo preg_replace_callback('/./',function($a){return chr([rand(33,126),rand(48,57),rand(65,90),rand(97,122),ord(str_shuffle('`~!@#$%^&*()_+-={}|[]\:";\'<>?,./')[0])][$a[0]]);},str_shuffle(str_pad('1234',15,0)));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.