ক্র্যাকিং চলছে


57

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

চ্যালেঞ্জ

মুদ্রণযোগ্য আসকি অক্ষরযুক্ত একটি স্ট্রিং দেওয়া হয়েছে তবে কোনও নতুনলাইন নেই (ascii কোড 32 থেকে 126 বা রেজেক্সের সাথে মিলছে ^[ -~]{2,}$), এই বিধি অনুসরণ করে একটি আউটপুট মুদ্রণ করুন:

  • সময়ে t=n seconds, nমুদ্রিত প্রথম অক্ষর nইনপুট স্ট্রিং এর প্রথম অক্ষর।
  • nনির্দিষ্ট অক্ষরগুলির পরে , আপনাকে প্রাথমিকের দৈর্ঘ্যের একটি স্ট্রিং গঠনের জন্য একটি স্ট্রিং গঠিত এলোমেলো অক্ষর (ইউনিকোড পরিসীমা   থেকে ~কোড অভিন্নভাবে সিউডো-এলোমেলোভাবে বেছে নেওয়া হয়েছে) (কোড 32 থেকে 126) সংযোজন করা উচিত ।
  • আপনার কমপক্ষে কমপক্ষে (আরও পরে) আরও 20 টি লাইন আউটপুট করা উচিত : তাদের প্রত্যেকেরই nপ্রথম অক্ষর একই হবে তবে ভিন্ন এলোমেলো প্রান্ত থাকবে।

আপনার কী করা উচিত তা এখনও খুব স্পষ্ট নয়, সুতরাং একটি উদাহরণ দেওয়া যাক:

উদাহরণ

আমি এটিকে আরও পঠনযোগ্য করে তুলতে কেবলমাত্র 20 ন্যূনতম পরিবর্তে প্রতি সেকেন্ডের জন্য কেবল 5 টি ভিন্ন লাইন প্রিন্ট করব।

ইনপুট বিবেচনা করুন abcde
প্রথম সেকেন্ডের সময়, একটি বৈধ আউটপুট এমন কিছু হতে পারে (সম্পূর্ণরূপে এলোমেলো):

dGuT4
S!jkN
"gQ>[
TU3! 
*fAjV

তারপরে, t=1নিম্নলিখিত প্রতিটি স্ট্রিংয়ের aপ্রথম অক্ষরটি হবে ( ইনপুটটির প্রথম অক্ষর):

a);jD
aHv^p
aqw5*
a|.?:
a{gbK

এখন, t=2প্রথম দুটি অক্ষর হবে ab:

abTJ"
ab\ e
ab3T#
abYWS
ab"#<

এখন, t=3প্রথম তিনটি অক্ষর হবে abc:

abcvW
abc3G
abc(g
abc{@
abc@4

এখন, t=4প্রথম চারটি অক্ষর হবে abcd:

abcdD
abcdv
abcdj
abcd$
abcd6

অবশেষে, t=5আমরা ইনপুটটি মুদ্রণ করি (কেবল একবার):

abcde

কয়েকটি নির্ভুলতা

  • সেকেন্ডের দিকে আপনার ভাষার নির্ভুলতার সাথে আপনার খুব বেশি বিরক্ত করা উচিত নয় (উদাঃ যদি আপনার অ্যালগরিদম সঠিক হয় তবে আপনার সিস্টেম / ভাষায় যথাযথতার অভাব হয় তবে তা ঠিক আছে)।
  • প্রথম সেকেন্ডটি এক সেকেন্ডের চেয়ে কম হতে পারে (এটি যদি আপনি একটি সেকেন্ডের সময় প্রোগ্রাম চালু করেন তবে প্রথম সেকেন্ডটি বর্তমান সেকেন্ডের শেষ হওয়া পর্যন্ত অবশিষ্ট সময় হতে পারে)। বা অন্যভাবে বলতে গেলে, আউটপুটগুলি মুদ্রণ শুরু করতে আপনাকে নতুন দ্বিতীয় শুরু করার জন্য অপেক্ষা করতে হবে না।
  • কমপক্ষে 20 সেকেন্ডে প্রতি সেকেন্ড : আরও প্রাকৃতিক উপায়ে প্রতি সেকেন্ডে (বা একটি সময়সীমা, বা যাই হোক না কেন) একটি বিশেষ আচরণের সাথে একটি অসীম লুপ হবে, যার ফলস্বরূপ সম্ভবত প্রতি সেকেন্ডে কয়েক হাজার লাইন হবে (এবং এটি পুরোপুরি ঠিক আছে! )। তবে আপনার যদি অন্য ধারণা থাকে তবে যতক্ষণ না আপনি প্রতি সেকেন্ডে কমপক্ষে 20 লাইন প্রিন্ট করবেন ততক্ষণ এটি ব্যবহার করতে দ্বিধা বোধ করবেন।
  • ইনপুটটি সর্বদা 2 টিরও বেশি অক্ষরের দীর্ঘ হবে।
  • আপনি বিবেচনা করতে পারেন যে ইনপুটটি 30 টি অক্ষরের বেশি হবে না যদি এটি সাহায্য করে। (তবে এটি যদি দীর্ঘ সময়ের জন্য কাজ করে তবে এটি সর্বোত্তম জন্য)
  • ইনপুট ফর্ম্যাটটি আপনার ভাষার কোনও স্ট্রিংয়ের সর্বাধিক প্রাকৃতিক উপস্থাপনা হওয়া উচিত।
  • আপনাকে একটি ট্রেলিং নিউলাইন মুদ্রণের অনুমতি দেওয়া হয়েছে।

কোড উদাহরণ

আপনার এখনও ঠিক কী করতে হবে তা আপনি যদি বুঝতে না পারেন তবে লিনাক্স টার্মিনালে নিম্নলিখিত কোডটি চালাতে পারেন:

perl -F -aplE 'map{$t=time;print$s,map{chr 32+rand 94}@F until$t-time;$s.=shift@F}@F' <<< "Cracking in progress\!"

বিজয়ী মানদণ্ড

এটি , তাই বাইট জিতে সংক্ষিপ্ততম কোড!


স্যান্ডবক্সে তাদের পরামর্শ এবং উন্নতির জন্য লাইকনি এবং Flp.Tkc ধন্যবাদ।



1
আউটপুটটির লাইনগুলি আলাদা করে আনা বাধ্যতামূলক \r(এনিমেশনের মতো একে অপরের অনস্ক্রিনকে প্রতিস্থাপন করা), বা \nগ্রহণযোগ্য?

1
@ ais523 \nপুরোপুরি গ্রহণযোগ্য। সংস্করণটি \rএখানে ঠিক আছে কারণ এটি আরও ভাল দেখাচ্ছে তবে আপনার এটির দরকার নেই \r
দাদা

যদি এলোমেলো প্রজন্মের পাসওয়ার্ডটি ক্র্যাক করার আগে ঘটে থাকে তবে ঠিক কি সেই সময়ে থামানো ঠিক হবে?
জোনাথন অ্যালান

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

উত্তর:



29

এইচটিএমএল / জাভাস্ক্রিপ্ট, 170 168 167 বাইট

setInterval('o.textContent=i.value.replace(/./g,(c,i)=>new Date-d>++i*1e3?c:String.fromCharCode(Math.random()*95+32))',d=50)
<input id=i oninput=d=Date.now()><pre id=o>

সম্পাদনা: @ বুদ্ধিমানের জন্য 2 টি বাইট সংরক্ষণ করা @ জরিচকে 1 বাইট সংরক্ষণ করা হয়েছে।


এটি পরীক্ষা করা হয়নি, তবে আমি বিশ্বাস করি setIntervalযে কোনও স্ট্রিংটি বিস্তৃত হবে তা গ্রহণ করবে, যা সম্ভবত বাইট সংরক্ষণ করতে পারে? setInterval('o.textContent...',d=50)সংরক্ষণ করে _=>এবং একজোড়া উক্তি যুক্ত করেছে
29 তে সমৃদ্ধ করুন

@ জরিখ এটি কার্যকর ছিল, কারণ আমি আমার বাইট গণনা আপডেট করতে ভুলে গেছি!
নিল

20

নোড, 145 142 বাইট

for(s=process.argv[2],d=new Date;s[a=(new Date-d)/1e3|0]+console.log(s.replace(/./g,(c,i)=>i<a?c:String.fromCharCode(32+Math.random()*95))););

এটি কিছুটা দীর্ঘ বলে মনে হচ্ছে এবং গল্ফ করার জন্য সম্ভবত একটি ছোট্ট জায়গা রয়েছে। নোট করুন যে শেষে সেমিকোলন প্রয়োজন; এটি ছাড়া প্রোগ্রামটি একটি বাক্য গঠন ত্রুটি ছুঁড়ে দেয় কারণ forবিবৃতিটির কোনও বডি নেই।

আউটপুট উপায় প্রতি সেকেন্ডে 20 লাইন বেশি; একটি সামান্য বার্ডি আমাকে বলেছিল যে এটি প্রায় 12 হাজার। এটি আমার কম্পিউটারে ConEmu টার্মিনাল এমুলেটরটিতে দেখতে কেমন তা এখানে রয়েছে (30 fps এ রেকর্ড করা):

এখানে চিত্র বর্ণনা লিখুন


10

05 এ বি 1 ই , 26 বাইট

পদ্ধতির অবস্থানটি আলাদা হওয়ায় আমি অন্যান্য 05AB1E উত্তরের সাথে আলাদা আলাদা উত্তর হিসাবে পোস্ট করি

.põ¸ì¨vT·FyžQ.r¹gyg-£«}}¹»

.p                         Generate ordered prefix of input (e.g., ["a", "ab", "abc", "abcd", "abcde"] for "abcde")
  õ¸ì                      Prepend an empty string (e.g., result is ["", "a", "ab", ...])
     ¨                     Strip the last element (the same string as the input)
      v                    For each string in the array
       T·F                 For N in range(20)
          y                Push the current string
           žQ.r            Push all printable characters, shuffled
               ¹gyg-       Take the difference between the length of the input and the length of the current string -> x
                    £      Take the x first characters from the shuffled printable characters
                     «     Yield currentString + shuffledCharacters
                      }    End inner for
                       }   End outer for
                        ¹  Push input (last iteration)
                         » Join everything with newlines and implicitly display

এটি অনলাইন চেষ্টা করুন!


ভাল উত্তর, আমার কাছ থেকে +1! দ্রষ্টব্য: আজকাল নতুন বিল্টিনগুলির সাথে এটি 22 বাইট হতে পারে : পরিবর্তে ; ( তালিকার জন্য কোথায় प्रीপেন্ড হয়) পরিবর্তে (যেখানে তালিকায় মোড়ানো থাকে এবং প্রিপেন্ড থাকে); ( যদি দ্বিতীয় ইনপুট না দেওয়া হয় তবে 26 কোথায় ) এর পরিবর্তে (যা ধাক্কা 10, এবং দ্বিগুণ); পরিবর্তে (যেখানে একই সাথে সমস্ত লুপগুলি বন্ধ করা হয়, যদি-একই সময়ে বিবৃতি ইত্যাদি)η.põššõ¸ì¸ì]}}]
কেভিন ক্রুইজসেন

8

BASH, 99 93 92 91 88 বাইট

সঙ্গে tr+ + head+ +urandom

while ((${#1}-n));do
echo "${1::n=SECONDS}`tr -dc \ -~</dev/ur*|head -c$[${#1}-n]`"
done

(thx। থেকে @ manatwork)


5
[ "$n" = ${#1} ]((n==${#1})); ${1:0:$n}${1::n}
manatwork

@ মানাত ওয়ার্ক: হু!
ইপোর সিরসর

1
আরও 1: ইনপুট পুনর্নির্দেশের সামনের স্থানটির <প্রয়োজন নেই।
manatwork

1
@manatwork ((n==${#1}))->((${#1}-n))
Ipor Sircer

1
হয় আপনি যুক্তি বিপরীত কারণ বা আমি আমার আগের পরীক্ষা নিষিদ্ধ, কিন্তু ${1::n=SECONDS}এখন কাজ করে বলে মনে হচ্ছে।
manatwork


6

সি, 182 176 128 126 125 বাইট

Golfed:

i;s;n;x;g(char*c){time(&s);while(c[++x]);do{n=time(0)-s;for(i=0;i<x;i++)putchar(i<n?c[i]:32+rand()%95);puts("");}while(n<x);}

Ungolfed:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int i,s,n,x;
void g(char* c) {
  time(&s); //Get the initial time
  while(c[++x]); // x = strlen(c) (happy about this one)
  do {
    n = time(0) - s; //seconds since beginning
    for(i = 0; i < x; i++)
      //after each second, print another char of the password
      putchar(i < n ? c[i] : 32 + rand() % 95);
    puts("");
  } while(n < x); //while we haven't printed the whole word
}

আমি শুনেছি যে কিছু মানক ড্রপ করা সম্ভব #include, তবে আমি স্রেফ ডাউনলোড করা মিংডাব্লু জিসিসি সংকলকটিতে এটি কাজ করতে পারিনি। এছাড়াও #define b #includeএটির চেয়ে বেশি জায়গা ব্যবহার না করে কীভাবে তা নির্ধারণ করা যায়নি । আমি কেবল একজন বোকা, এগুলি না করে ঠিকঠাক কাজ করে।


এক্স = 0 এর পরিবর্তে অন্যদের সাথে এটি ঘোষণার প্রয়োজন নেই যেমন a,b,c,d;সমস্ত গ্লোবাল ভেরিয়েবলগুলি ইন্টের মত প্রকাশিত হয় এবং 0 দ্বারা প্রবর্তিত হয় আপনি যেহেতু কিছুই ফিরিয়ে দিচ্ছেন না তাই আপনাকে এটি
মুকুল কুমার

1
ধন্যবাদ, আমি স্ট্যাটিক স্কোপ ইনিশিয়েশন সম্পর্কে জানতাম না। আমি এগুলি তাদের ঠিক ঘোষণা দিয়েছিলাম, ঠিক কমাগুলির পরিবর্তে আধা-কলোন দিয়ে। এছাড়াও আমি প্রধানটি ব্যবহার করিনি কারণ আমার মনে হয় এরপরে আমার দরকার হবে (int argc, char ** argv) এবং এটি টন বাইট। আমি আশা করি এটি একটি ফাংশন হিসাবে রেখে দেওয়া ঠিক আছে, যদিও এটি প্যারামিটার হিসাবে স্টপআউট হিসাবে আউটপুট নেয় এবং কিছুটা বিজোড় হয়।
nmjcman101

1
while(i++<x) পরিবর্তে ব্যবহার করুনfor (...)
মুকুল কুমার

সত্যিই ভাল ধারণা, তবে iলুপটি আবার চলার জন্য প্রতিবার শূন্য হওয়া দরকার।
nmjcman101

তারপর একই forপ্রতিস্থাপন i <xসঙ্গে i++<xএবং অপসারণi++
মুকুল কুমার

5

জাভা 7, 271 265 207 বাইট

void c(String s)throws Exception{for(int i=0,j,l=s.length();i<=l*20;i++){String r=s.substring(0,i/20);Thread.sleep(45);for(;j++<l;r+=(char)(32+Math.random()*95);System.out.println(r);if(s.equals(r))return;}}

-58 বাইট সংরক্ষিত হয়েছে @ অলিভারগ্রোগোয়ারের জন্য ধন্যবাদ । ( তার এমনকি সংক্ষিপ্ত জাভা 8 উত্তর upvote ভুলবেন না। )

Ungolfed:

void c(String s) throws Exception{
  for(int i = 0, j, l = s.length(); i <= l*20; i++){
    String r = s.substring(0, i/20);
    Thread.sleep(45);
    for( ; j++ < l; r += (char)(32+Math.random()*95));
    System.out.println(r);
    if(s.equals(r)){
      return;
    }
  }
}

ইনপুট: abcde
আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


আমি নিশ্চিত নই যে আপনি প্রতি সেকেন্ডে কেবল 20 টি লাইন মুদ্রণের জন্য উদ্দেশ্যমূলকভাবে এটি নকশা করেছিলেন তবে এটি যদি আপনার গল্ফিংয়ে সহায়তা করে তবে আপনাকে প্রতি সেকেন্ডে কমপক্ষে 20 টি লাইন মুদ্রণ করতে হবে । আমি জানি না "প্রতি সেকেন্ডে 20 টি লাইন" গণিতে "প্রতি সেকেন্ডে পরিবর্তন" গণিতটি সাহায্য করবে কি না not
nmjcman101

আপনি প্রয়োজন হবে না x: r+=(char)(33+Math.random()*94)। এছাড়াও Thread.sleep(9)একটি বাইট সংরক্ষণ করুন।
অলিভিয়ার গ্রাগোয়ার

1
এছাড়াও, r=s.substring(0,i/20)লুপের পরিবর্তে j
অলিভিয়ার গ্রাগোয়ার

আমি যে উল্লেখযোগ্য পরিবর্তনগুলি করেছি সেগুলি বিবেচনা করে, আমি এই মন্তব্যগুলি আমলে নিয়ে আমার উত্তর পোস্ট করার সিদ্ধান্ত নিয়েছি। এছাড়াও, এটি একটি জাভা 8 সমাধান যা বাইট গণনা (জাভা অনুসারে, ofc) এর চেয়ে কম যেতে হবে।
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ এবং আমি আপনার উত্তর upvated করেছি। আমি সমস্ত পরিবর্তন করি নি, কেবল r.substring(0,i/20)(আমার খুব বোকা) এবং (char)(33+Math.random()*94)(আপনার কাছ থেকে একটি দুর্দান্ত কৌশল)।
কেভিন ক্রুইজসেন

4

WinDbg, 400 391 বাইট

.for(r$t1=@$t0;by(@$t1);r$t1=@$t1+1){};m@$t0 L@$t1-@$t0+1 @$t1+1;r$t4=2*@$t1+2-@$t0;r$t8=@$t4+f;r$t3=0;.for(r$t2=0;@$t2<@$t1-@$t0;da@$t0){.for(r$t7=@$t0+@$t2;by(@$t7);r$t7=@$t7+1;r$t8=@$t8+1){eb@$t7 by(@$t8)%5e+20};r$t9=0;.foreach(p {.echotime}){.if7==@$t9{ea@$t4"p";.if1>@$t3{r$t3=by(@$t4+7)}};r$t9=@$t9+1};j@$t3!=by(@$t4+7)'m@$t0+@$t4-@$t1+@$t2-1 L1 @$t0+@$t2;r$t2=@$t2+1;r$t3=by(@$t4+7)'}

কিছু গণিত সরল করে -9 বাইট

এটি অবশ্যই উইনডিবিজি করার মতো ধরণের কাজ বলে মনে হয় না। ;)

ইনপুটটি কোনও মেমরির স্থানে আসকি স্ট্রিং প্রবেশ করে এবং সেই ঠিকানাটি সিউডো-রেজিস্টারে সেট করে নেওয়া হয় $t0। উদাহরণ:

r$t0 = 2000000
eza @$t0 "abcde"

আমি যে প্রঙটি ব্যবহার করছি তা হ'ল মেমরির যে কোনও বিষয়বস্তু, ইনপুট স্ট্রিংয়ের কিছুটা বাইট। Chrome.exe 0x2000000এলোমেলো-দেখতে-যথেষ্ট বাইট সহ মেমরির স্থান পূরণ করার জন্য উপস্থিত হয় তাই আমি chrome.exe এর একটি ডাম্প ব্যবহার করেছি। এটি অভিন্ন হলেও অজানা তবে আমার কাছে এলোমেলো-যথেষ্ট দেখাচ্ছে।

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

.for(r$t1=@$t0; by(@$t1); r$t1=@$t1+1){};         * From $t0, increment $t1 until the byte
                                                  * at $t1 is 0 to find length of input
m@$t0 L@$t1-@$t0+1 @$t1+1;                        * Duplicate input (memory 
                                                  * becomes: "input\0input\0")

r$t4=2*@$t1+2-@$t0;                               * Set $4 to the byte after \0 of the 
                                                  * duplicated input
r$t8=@$t4+f;                                      * Set $t8 to $t4+15, this is the prng
r$t3=0;                                           * Init $t3=0, this will hold the time

.for(r$t2=0; @$t2<@$t1-@$t0; da@$t0){             * For $t2=0, loop until it's input length,
                                                  * printing the string at $t0 after each
                                                  * loop. $t0 is where the password crack
                                                  * progress is written.
    .for(r$t7=@$t0+@$t2; by(@$t7); r$t7=@$t7+1;   * Loop over each uncracked char
                                   r$t8=@$t8+1){  * also incrementing prng ($t8)
        eb@$t7 by(@$t8)%5e+20                     * Write a visible ascii char onto the
                                                  * uncracked char position based on the 
                                                  * current byte of prng%0x5e+0x20 (prng%126+32)
    };

    r$t9=0;                                       * Set $t9=0 for updating current time
    .foreach(p {.echotime}){                      * For each (string) word in a statement
                                                  * like "Debugger (not debuggee) time: Mon 
                                                  * Nov 21 18:23:08.433 2016 (UTC - 8:00)"
        .if7==@$t9{                               * If the 7th word, ie- the current time
            ea@$t4"p";                            * Write the time at $t4
            .if1>@$t3{                            * If $t3 has not been set yet
                r$t3=by(@$t4+7)                   * ...save the current second in $t3
            }
        };
        r$t9=@$t9+1                               * Increment $t9 until it's 7
    };

    j@$t3!=by(@$t4+7)'                            * If the current second has changed
        m@$t0+@$t4-@$t1+@$t2-1 L1 @$t0+@$t2;      * Copy the cracked char from dupe input
        r$t2=@$t2+1;                              * Increment $t2 (loop ends when this is input length)
        r$t3=by(@$t4+7)                           * Save the new current second
    '
}                                                 * Final crack is printed by for loop

দ্রষ্টব্য: কিছু বাইটগুলি এর jপরিবর্তে ব্যবহার করে গল্ফ করা যেতে পারে .ifতবে এটি আমার মেশিনে খুব ধীরে ধীরে চলতে পারে যাতে এটি প্রতি সেকেন্ডে কমপক্ষে 20 লাইন আউটপুট না দেয়, সুতরাং সেই বাইটগুলি সংরক্ষণ না করে।

নমুনা আউটপুট: http://pastebin.com/H4H74sAx


4

আর, 138 বাইট

z=Sys.time;n=nchar(x<-scan(,""));s=z();t=0;while(t<=n){t=t+z()-s;cat(substr(x,1,f<-floor(t)),intToUtf8(sample(32:126,n-f,T)),"\n",sep="")}

স্টিডিনের কাছ থেকে ইনপুট পড়ে।

"পাসওয়ার্ড" এর প্রতিটি অতিরিক্ত চিঠির মধ্যে আমার মেশিনে প্রায় 61 টি লাইনের গণনা করা হয়েছে।


4

বাশ, 247 245 212 207 বাইট

R()(echo $SECONDS);w=`R`;until [ "$a" = "$1" ];do for i in `seq 1 $[${#1}-${#a}]`;{ a+=`printf "\x$(printf %x $[$RANDOM%127+32])"`;};echo -e "$a\r";a=${1:0:q};((`R`-w>0))&&{ w=`R`;((q++));}||:;done;echo "$a"

এত সাদা স্পর্শকাতর হওয়ার জন্য অনেক ধন্যবাদ ব্যাশ ...

যাইহোক, আউটপুট পৃথক লাইনে রিয়েল টাইমে দেওয়া হয়। .shস্ক্রিপ্ট হিসাবে সংরক্ষণ করুন এবং এর সাথে অনুরোধ করুন:

bash <File Name>.sh <Input>

উদাহরণস্বরূপ, bash Cracking_In_Progress.sh okayertyনিম্নলিখিত আউটপুট ফলাফল, প্রতি সেকেন্ডে 30 ফ্রেমে রেকর্ড করা:

উদাহরণ আউটপুট


4

হাস্কেল (জিএইচসি), 202 বাইট

import System.Random
import Control.Concurrent
f s|l<-length s=mapM_(\n->putStr('\r':take n s)>>mapM(\_->toEnum<$>randomRIO(32,126))[1..l-n]>>=putStr>>threadDelay 50000)$[n|n<-[0..l-1],f<-[1..20]]++[l]

অভিনব ক্যারেজ রিটার্ন অ্যাকশন ছাড়াই -5 বাইট

এখানে চিত্র বর্ণনা লিখুন


ভাল লাগছে! কিন্তু >আউটপুট শেষে কি করছে?
মাস্তে

3
@ বেশিরভাগ এটিই প্রম্পট। যেহেতু কোডটি শেষে একটি নতুন লাইন মুদ্রণ করে না, প্রম্পটটি সেখানে চলে যায়।
অ্যাঙ্গস

4

এমএটিএল , 26 বাইট

`GZ`:)' ~'olGn4Mk-I$YrhD7M

এটি অনলাইন চেষ্টা করুন!

নীচে অফলাইন সংকলক থেকে রিয়েল-টাইম আউটপুট রয়েছে। নোট করুন যে অ্যানিমেটেড জিআইএফ এর আকার ছোট রাখতে 20 fps এ রেকর্ড করা হয়েছিল, তবে প্রকৃত গতি অনেক বেশি।

এখানে চিত্র বর্ণনা লিখুন

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

           % Implicitly start timer
`          % Do...while
  G        %   Push input
  Z`       %   Push timer's current value, say t
  :)       %   Select the first t elements of the input, with t
           %   implicitly rounded down
  ' ~'     %   Push this string
  o        %   Convert to numbers, i.e. [32 126]
  l        %   Push 1
  Gn       %   Push input size, say n
  4Mk      %   Push floor(t), where t is the same value used above
  k        %   Subtract. Gives n-floor(t)
  I$Yr     %   Generate a row vector of n-floor(t) integers randomly
           %   chosen from 32 to 126
  h        %   Concatenate with the first characters of the input
  D        %   Display
  7M       %   Push the value n-floor(t) used above. This is used
           %   as loop condition: iz zero the loop is exited 
           % Implicit end

2
এই কোড তাই খুশি। :)
sethmlaron

@ শেঠমিশেল লারসন কারণ এটির উদ্ধৃতি চিহ্নগুলি ভারসাম্যযুক্ত, যা সাধারণত ঘটে না :-)
লুইস মেন্ডো

3

পাইথন 3, 149 141 139 বাইট

import time,random
i,x=input(),0;l=len(i)
while x<l:x=int(time.clock());print(i[:x]+"".join(chr(random.randint(32,126))for _ in"a"*(l-x)))

স্টিডিন থেকে ইনপুট।

চোখের সংস্করণ (157 বাইট):

import time,random
p,i,x=print,input(),0;l=len(i)
while x<l:x=int(time.clock());p(i[:x]+"".join(chr(random.randint(32,126))for _ in"a"*(l-x)),end="\r")
p(i)

1
আমি মনে করি আপনি কেবলমাত্র একবারে জিনিসগুলি "নাম পরিবর্তন" না করে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন। উদাহরণস্বরূপ আপনার কাছে রয়েছে t=time.clockতবে আপনি কোডে একবার টি ব্যবহার করেন। এটিকে প্রতিস্থাপনের মাধ্যমে time.clock3 বাইট সাশ্রয় হবে। মুদ্রণের জন্য একই জিনিস।
nmjcman101

@ nmjcman101 ওহো, পূর্ব ভার থেকে নিয়ে যান। ধন্যবাদ!
মাতসয়জাই

এছাড়াও আপনার 2 বাইট জন্য for _ in range(l-x)হতে পারে for _ in"a"*(l-x)
nmjcman101

@ nmjcman101 চমৎকার! আমাকে অবশ্যই এটি মনে রাখতে হবে ...
ম্যাটসয়জাই

ব্যবহার করে দেখুন print(i[:x]+''.join(map(chr,random.sample(range(32,127),l-x))))পরিবর্তেprint(i[:x]+"".join(chr(random.randint(32,126))for _ in"a"*(l-x)))
x1Mike7x

3

নোড.জেএস, 134 বাইট

for(s=[...process.argv[2]],n=new(d=Date);s[m=(new d-n)/1e3|0]+console.log(s.map((a,i)=>i<m?a:Buffer([Math.random()*95+32])).join``););

@ ইথ প্রডাকশনগুলির অনুরূপ (তার কয়েকটি অপ্টিমাইজেশান ধার করা), তবে অন্যথায় এটি ভিন্ন পদ্ধতি গ্রহণ করে। Bufferদীর্ঘ দৈর্ঘ্যের পরিবর্তে অক্ষর জেনারেশন পরিচালনা করতে নোড ব্যবহার করে String.fromCharCode, এতে আমাদের mapবেশি স্ট্রিং-> অ্যারে-> স্ট্রিং রূপান্তর ওভারহেড ছাড়াই ব্যবহার করতে দেওয়ার পার্শ্ব সুবিধা রয়েছে ।


ভাল লাগল, আমার এ সম্পর্কে আরও জানানো উচিত Buffer। ঠিক তেমনই আপনি জানেন, পুনরায় অর্পণ Dateকরা Dকোনও বাইট সংরক্ষণ করে না; আমি নিজে চেষ্টা করেছিলাম।
ETH প্রোডাকশন

3

পাইথন 3, 167 166 বাইট

import time,random
t=time.time
p,s=input(),t()
while t()-s<len(p):print(p[:int(t()-s)]+''.join(chr(random.randint(32,126))for _ in range(len(p)-int(t()-s))))
print(p)

স্টিডিনের কাছ থেকে ইনপুট পড়ে। পাইথন 2 এর অধীনে একটি 171-বাইট সংস্করণ চলমান (এর সাথে প্রতিস্থাপন inputকরা raw_input):

import time,random
t=time.time
p,s=raw_input(),t()
while t()-s<len(p):print(p[:int(t()-s)]+''.join(chr(random.randint(32,126))for _ in range(len(p)-int(t()-s))))
print(p)

Ungolfed:

import random
import time

p = input()
start = time.time()
while time.time() - start < len(p): 
    print(
        p[:int(time.time() - start)] + 
        ''.join(chr(random.randint(32, 126)) for _ in range(len(p) - int(time.time()-start)))
    )
print(p)

3

ডায়ালগ এপিএল , 59 58 বাইট

সমাধান

প্রয়োজন ⎕IO←0অনেক সিস্টেমে পূর্বনির্ধারিত।

⊢⊣≢{⍵{≢⎕←⍵↑⍺,⎕UCS 32+?⍵⍴95}⍣{t2⊃⎕AI}⍺⊣t1E3+2⊃⎕AI}¨⍳∘≢↑¨⊂

প্রদর্শন

উইন্ডোটিকে দুটি লাইনে সামঞ্জস্য করে আমরা একটি স্থান-স্থানান্তরের রূপ লাভ করি:
ডায়ালগ এপিএল কোড ক্র্যাকিং অ্যানিমেশন

ব্যাখ্যা

এটি একটি বেনামে ফাংশন ট্রেন যা পাসওয়ার্ডটিকে সঠিক যুক্তি হিসাবে গ্রহণ করে।

⊢⊣ পাসওয়ার্ডটি ফিরিয়ে দিন এবং ফলাফলটি বরখাস্ত করুন

≢{... বাম আর্গুমেন্ট হিসাবে পাসওয়ার্ডের দৈর্ঘ্য সহ নীচের ফাংশন, প্রতিটিটিতে প্রয়োগ করা হয়

2⊃⎕AIবর্তমান আপ-সময় (এর শয়নকামরা তৃতীয় উপাদান একটি ccount আমি nformation)

1E3+ একটি সেকেন্ড যোগ করুন

t←দায়িত্ব অর্পণ যে t

তা খারিজ করুন

⍵{... }⍣{t≤2⊃⎕AI}⍺(যেমন উপ-স্ট্রিং সঙ্গে নিম্নলিখিত ফাংশন প্রয়োগ এবং পাসওয়ার্ড দৈর্ঘ্য ) বারবার পর্যন্ত সময় ছুঁয়েছে টি

  ⍵⍴95 95 পাসওয়ার্ডে অক্ষর রয়েছে যতবার পুনরাবৃত্তি

  ? এলোমেলো পূর্ণসংখ্যা 0 ... 94

  32+32 যোগ করুন (এভাবে 32 12 ... 126 পরিসীমাটিতে এলোমেলো পূর্ণসংখ্যার ফলন হবে )

  ⎕UCS ইউনিকোড অক্ষরে রূপান্তর করুন

  ⍺, বর্তমানে প্রক্রিয়াজাত উপ-স্ট্রিংটি প্রিপেন্ড করুন

  ⍵↑ পাসওয়ার্ডের মধ্যে যতগুলি চরিত্র রয়েছে তেমন নিন

  ⎕← আউটপুট যে একটি পৃথক লাইনে

   আউটপুটযুক্ত স্ট্রিংয়ের দৈর্ঘ্য (পাসওয়ার্ডের দৈর্ঘ্য) ফিরিয়ে দিন

⍳∘≢ 0 ... দৈর্ঘ্য -1

↑¨প্রতিটি থেকে অক্ষর গ্রহণ

শব্দসংকেত


2

জাভা, 159 বাইট

s->{for(int i=0,j,l=s.length();i<=l*99;i++){String r=s.substring(0,j=i/20);Thread.sleep(9);for(;j++<l;r+=(char)(32+Math.random()*95));System.out.println(r);}}

কেভিন ক্রুইজসেনের উত্তর হিসাবে একই অ্যালগরিদম , কেবল জাভা 8 এর জন্য সম্পূর্ণরূপে অনুকূলিত।

Ungolfed:

public class Tmp {

  interface X {

    void f(String s) throws Exception;
  }
  static X f = s -> {
    for (int i = 0, j, l = s.length(); i <= l * 20; i++) {
      String r = s.substring(0, j = i / 20);
      Thread.sleep(48);
      for (; j++ < l; r += (char) (32 + Math.random() * 94));
      System.out.println(r);
    }
  };

  public static void main(String[] args) throws Exception {
    f.f("abcde");
  }
}

1

সি #, 203 197 195 190 বাইট

Golfed:

void F(string s){int l=s.Length,t=0;var w=Stopwatch.StartNew();do{if(w.Elapsed.Seconds>t)t++;Console.WriteLine($"{s.Substring(0,t)}{Path.GetRandomFileName().Substring(0,l-t)}");}while(t<l);}

Ungolfed:

    void F(string s)
    {
        int l = s.Length, t = 0;
        var w = Stopwatch.StartNew();

        do
        {
            if (w.Elapsed.Seconds > t)
                t++;

            Console.WriteLine($"{s.Substring(0, t)}{Path.GetRandomFileName().Substring(0, l - t)}");
        } while (t < l);
    }

l ইনপুট দৈর্ঘ্য সঞ্চয়।

StopWatchএবং Path.GetRandomFileName().NET ফ্রেমওয়ার্কের অংশ।

EDIT1: অন্তর্নিহিত Stopwatchঘোষণা।

EDIT2: সূচনাটি lঘোষণার সাথে একীভূত হয়েছিল।

সম্পাদনা 3: ধন্যবাদ, ক্রিস।


স্টপওয়াচটি নতুন করে সংরক্ষণ করতে এবং স্পষ্টভাবে এটি শুরু করতে আপনি স্ট্যাটিক পদ্ধতি স্টপওয়াচ ব্যবহার করতে পারেন Stস্টার্টএনও () নতুনভাবে শুরু করুন
ক্রিস

@ ক্রিস, আমি এই পদ্ধতি সম্পর্কে জানতাম না, thx।
পালদির

t++কোথাও beোকানো যেতে পারেif ()
মুকুল কুমার

@ মুকুলকুমার, আপনি কি আরও বিশদ সরবরাহ করতে পারেন?
পালদির

ব্যবহার if (w.Elapsed.Seconds > t++)এবং সরানt++;
মুকুল কুমার

1

স্কালা, 259 254 248 233 232 231 227 225 বাইট

import scala.concurrent.duration._;(b:String)=>{val d=b.length.seconds.fromNow;while(d.hasTimeLeft)println(b.zipWithIndex.map{case(f,g)=>if(g<b.length-d.timeLeft.toSeconds-1)f else(32+math.random*94)toChar}mkString);print(b)}

Ungolfed:

import scala.concurrent.duration._;

(b:String) => {
    val d = b.length.seconds.fromNow;
    while(d.hasTimeLeft)
        println(
            b.zipWithIndex.map{
                case(f,g) => 
                    if(g<b.length-d.timeLeft.toSeconds-1)
                        f 
                    else
                        (32+math.random*94)toChar}
            mkString
        );

    print(b)
}

1

ফোর্সলেং , 322 309 বাইট

def s set
s g goto
s W io.writeln
s k io.readln()
s T timer.new()
def a T.poll()
label 1
s P math.floor a.mult 1e-6
if P=k.len
 W k
 exit()
s j 0
s t ""
if P=0
g 4
label 3
s v k.charAt j
s t t+v
s j 1+j
if j-P
g 3
label 4
if j=k.len
 W t
 g 1
s r 94.mult random.rand()
s v string.char 32+r
s t t+v
s j 1+j
g 4

আপনি যে প্রোগ্রামিং ভাষার ব্যবহার করেছেন তার জন্য একটি লিঙ্ক যুক্ত করতে পারেন?
সলোমন উকো

@ সলোমনউকো আপনি এখানে যান
সুপারজেডি ২৪

1

সি ++ (জিসিসি) , 280 278 বাইট

#include<iostream>
#include<chrono>
#include<cstdlib>
#include<thread>
int i,n,t,q;void f(std::string s){for(t=s.size(),n=0;n<=t;n++)for(q=n<t?20:1;q--;std::this_thread::sleep_for(std::chrono::milliseconds(50)))for(std::cout<<"\n"<<s.substr(0,i=n);i++<t;)putchar(32+rand()%84);}

এটি অনলাইন চেষ্টা করুন!

এটি কেবলমাত্র 20 টি এলোমেলো স্ট্রিং std::chrono::millisecondsএকে অপরের মধ্যে 50 টি অপেক্ষা করে প্রিন্ট করে (এভাবে প্রতি সেকেন্ডে 20 লাইন আউটপুট দেয়) এবং তারপরে পরবর্তী "ক্র্যাকিং" ধাপে এগিয়ে যায়।


1

যান , 244 বাইট

import(."fmt"
."math/rand"
."time")
func a(s string){Seed(Now().Unix())
for i:=0;i<len(s);i++{t:=Now().Truncate(Second).Add(Second)
for Now().Before(t){q:=[]rune(s)
for p:=len(q)-1;p>=i;p--{q[p]=rune(32+Intn(95))}
Println(string(q))}}
Print(s)}

এটি অনলাইন চেষ্টা করুন! (ফলাফলটি কেটে দেয় যাতে এটি প্রতিটি উদাহরণ দেখায় না)

এটি আমার প্রথম গোলং উত্তর \ ও /

এখানে চিত্র বর্ণনা লিখুন

(চিত্রিত @ 30fps)

কিভাবে:

func a(s string) {                      //function a
Seed(Now().Unix())                      //Create a seed for the pRNG
for i := 0; i < len(s); i++ {           //set helper var i (this is the number of characters we'll keep)
t := Now().Truncate(Second).Add(Second) //set helper var t = 1 second from now
for Now().Before(t) {                   //while inside that 1 second window
q := []rune(s)                          //put each character in a rune slice and assign that to q
for p := len(q) - 1; p >= i; p-- {      //loops through the rune slice
q[p] = rune(32 + Intn(95))              //replace the character in position p with a random code point in [32,126]
}
Println(string(q))                      //print the rune slice as a string
}
}
Print(s)                                //finally, print the original string
}

0

পিএইচপি, 222 বাইট

$a=$argv[1];$c=range(32,126);$t=time();$s=$t;$e=$t+strlen($a);while(time()<=$e){$l=time();$p=$l-$s;$x=substr($a,0,$p);$k=$e-$l;$r='';for($i=$k;$i>0;$i--)$r.=chr($c[rand(0,94)]);$o=$x.$r;echo"$o\n";if($o==$a&&$l==$e)break;}

Ungolfed

<?php
$input = $argv[1];
$chars = range(32, 126); // count() is 95

$startTime = time();
$endTime = time() + strlen($input);

while (time() <= $endTime) {
    $plaintextAmountToPrint = time() - $startTime;

    $plain = substr($input, 0, $plaintextAmountToPrint);

    $cryptAmountToPrint = $endTime - time();

    $crypt = '';

    for ($i = $cryptAmountToPrint; $i > 0; $i--)
        $crypt .= chr($chars[rand(0, 94)]);

    $output = $plain . $crypt;

    echo $output . "\n";

    if ($output == $input && time() == $endTime)
        break;
}

(আমি জানি ভিডিওটি বকাঝকা) এখানে চিত্র বর্ণনা লিখুন


এটি আরও অনেক গল্ফ করা যেতে পারে। উদাহরণস্বরূপ, পরিবর্তে $c=range(32,127)এবং তারপরে $r=chr($c[rand(0,94)]), কেন শুধু নয় $r=chr(rand(0,94)+32)?
জ্যান্সারহাল

ভাল যুক্তি. এটি আমার প্রথম গল্ফ: পি
নিনো opkopac

<?$l=strlen($a=$argv[1]);$e=$l+$s=time();while(time()<=$e&&$o!=$a){$o=substr($a,0,time()-$s);while(strlen($o)<$l)$o.=chr(rand(0,94)+32);echo "$o\n";}149 বাইট, এবং আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে
Xenderhall

শান্ত, আপনার লোকটিকে পোস্ট করা উচিত।
নিনো এককাপ্যাক

আপনার উত্তরটি সম্পাদনা করুন, আপনাকে এটি পরিবর্তন এবং উন্নত করার অনুমতি দেওয়া হয়েছে।
Xenderhall

0

Tcl , 295 বাইট

টিসিএল এ আমার জন্য প্রথম গল্ফ। খুব গল্ফযোগ্য ভাষা নয়, যেহেতু এখানে সবকিছুকে স্ট্রিং হিসাবে বিবেচনা করা হয় তাই হোয়াইটস্পেসটি সাধারণত একটি আবশ্যক ...

set l [string length $argv];set s [clock seconds];set r -1;while {$r<$l-1} {puts -nonewline [string range $argv 0 $r];set k $l;while {[set k [expr $k-1]]>$r} {puts -nonewline [format %c [expr int(rand()*95+32)]]};puts "";if {[expr [clock seconds]-$s]>[expr $r+1]} {set r [expr $r+1]}};puts $argv

Ungolfed:

set l [string length $argv]
set s [clock seconds]
set r -1
while {$r < $l-1} {                                      # loop on time
  puts -nonewline [string range $argv 0 $r]
  set k $l
  while {[set k [expr $k-1]] > $r} {                     # loop on "unfound" chars
    puts -nonewline [format %c [expr int(rand()*95+32)]]
  }
  puts ""
  if {[expr [clock seconds]-$s] > [expr $r+1]} {         # advance time
    set r [expr $r+1]
  }
}
puts $argv

কেন তুমি তারপর একটি পরিবর্তনশীল আউটপুট সংরক্ষণ করি না তাদের সবাইকে যোগ দিতে, এড়াতে -nonewlineউপর putsপরামিতি?
সার্জিওল

আমি মনে করি আপনার exprশেষে দু'জনের দরকার নেই ; একটি যথেষ্ট, এবং আপনি আশেপাশের স্থানগুলি এড়াতে পারেন >
সার্জিওল

ধন্যবাদ @ সার্জিওল, চারপাশে কোনও স্থান নেই>, কনডেন্সড সংস্করণটি দেখুন। দয়া করে পরামর্শ দিন কীভাবে একটি ব্যবহার করবেন expr, আমি এটি দেখতে পাচ্ছি না।
hdrz

আমার দুটি পরামর্শ ডেমো
সার্জিওল

1
[set k [expr $k-1]]হতে পারে [incr k -1]। এবং প্রতিটি `<` হতে পারে <, কোনও স্পেসের প্রয়োজন নেই।
সার্জিওল

0

কোটলিন, 188 বাইট

Golfed

val x=readLine()!!;val n=System::currentTimeMillis;val t=n();do{val s=(n()-t)/1000;x.mapIndexed{i,c->print(if(i<s)c else((Math.random()*(126-32))+32).toChar())};println()}while(s<x.length)

Ungolfed

val input = readLine()!!
val time = System::currentTimeMillis
val startTime = time()
do {
    val crackIndex = (time() - startTime) / 1000
    input.mapIndexed{ i, letter ->
        print(
            if (i < crackIndex) letter else ((Math.random()*(126-32))+32).toChar()
        )
    }
    println()
} while(crackIndex < input.length)

এখানে চিত্র বর্ণনা লিখুন

পুনর্নামকরণে System.currentTimeMillisবেশ কয়েকটি বাইট সংরক্ষণ করা হয়েছে!


0

কিউবিআইসি , 92 88 বাইট

আমি এটা ফাটল!

t=20;_LA|[a*t-t|B=$left$|(A,b/t)[a|B=B+$CHR$|(_r94|+32)]?$left$|(B,a)~b%t=0|$sleep 1|}?A

এটি কিউবিসিকের স্লিপ ফাংশনটির উপর নির্ভর করে কোডটি আক্ষরিক ব্যবহার করে $sleep 1|এবং কিউব্যাসিকের LEFT$ফাংশনটির উপর কারণ আমি কিউবিসিতে এখনও এই ফাংশনটি প্রয়োগ করি নি ...

সমস্ত 20এর জন্য প্রতিস্থাপিত করে tএবং 20 এ সেট করে কিছু বাইট স্ক্র্যাপ করার ব্যবস্থা করা Also এছাড়াও, এলোমেলোভাবে একটি কল এবং একটি লুপের জন্য একটি কলকে প্রবাহিত করে।

ব্যাখ্যা:

' Get cmd line param with 'password' and the length of that string, set t to 20
t=20;_LA|

' loop from 1 (implicitly) to (#chars-1) * 20 cracks per char
[a*-t|

'have our crack-display start with the first N chars of
'the password, where N is the number of seconds passed   
B=$left$|(A,b/t)

' loop to add the 'crack-visual'
' It's too long, but we'll trim it down to the original length
[a|B=B+$CHR$|(_r92|+34)]?$left$|(B,a)

' if we've done 20 cracks, sleep for 1 second
~b%20=0|$sleep 1|}

' We've cracked it!
?A

আউটপুট ('হেলিওর্ল্ড' এর মাঝের অংশের একটি অংশ)

hewnoluZfs
heb!mrc2g@
hee+yh"5ut
he0?V+O)Uu
heqf(#M/BM
hez|DGX%a8
he<_n[6-.+
helkxQ#g%,
hel&^A9$I8
hel43{b5]t
helszK50%F
hel`kdy ;b
hel Vr6Z}s
helLIR7*7o 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.