• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Cum să generezi permutări în node.js?

0
  • Publicat de Andrei Avădănei
  • în Javascript, Ajax, jQuery · Open Source · Tehnic
  • — 12 apr., 2013 at 8:00 am

word-listNode.js tinde să aibă o rată de adopție destul de semnificativă și să crească încet, dar sigur. Dacă ai nevoie de o metodă simplă de a genera toate aranjamentele de minim x caractere și maxim y caractere aplicația de mai jos te-ar putea ajuta. Exemplul de mai jos este o implemantare de bază a unei funcții nextPermutation(callback) care iți va genera mereu următoarea permutare și o va scrie în fișierul wordlist.txt. Implementarea nu e foarte maleabilă și are nevoie de ceva update-uri dacă dorești să o folosești în mod repetat în același proiect dar ca și concept este extrem de utilă. Am integrat comentarii doar în partea algoritmului, restul presupunând că ar cam trebui să cunoașteți.

Dependențe

Node Package Manager + cele două pachete NPM de mai jos:

npm install optimist
npm install underscore

Sursa

var fs   = require('fs'),
	argv   = require('optimist').argv,
    _    = require('underscore'),
    file = 'wordlist.txt',
    stream = fs.createWriteStream(file, {flags: 'w'});

// Numbers = 48 - 57
// Capital = 65 - 90
// Lower = 97 - 122

var charsBuffer  = [],
	numbers      = _.range(48, 58),
	alfalow      = _.range(97,123),
	alfacap      = _.range(65,91);

switch(argv.type){
	case 1:  charsBuffer = numbers; break;
	case 2:  charsBuffer = alfacap; break;
	case 3:  charsBuffer = alfalow; break;
	case 4:  charsBuffer = _.union(numbers,alfacap); break;
	case 5:  charsBuffer = _.union(numbers,alfalow); break;
	case 6:  charsBuffer = _.union(numbers,alfalow,alfacap); break;
	case 7:  charsBuffer = _.union(alfalow,alfacap); break;
	default:
		console.log(""+
			"Invalid options, please chose a type number between 1 to 7. \nEx: node wordlist.js --type 1 --min 1 --max 10\n"+
			"1) Numbers\n"+
    		"2) Capital Letters\n"+
    		"3) Lowercase Letters\n"+
    		"4) Numbers + Capital Letters\n"+
    		"5) Numbers + Lowercase Letters\n"+
    		"6) Numbers + Capital Letters + Lowercase Letters\n"+
    		"7) Capital Letters + Lowercase Letters\n");
	process.exit(0);
}
var string = _.map(charsBuffer,function(dec) {
	return String.fromCharCode(dec);
}).join('');

if(!_.isNumber(argv.min) || !_.isNumber(argv.max) || argv.min <= 0 || argv.min > argv.max) {
	console.log("Invalid options, please chose valid values for min and max params. \nEx: node wordlist.js --type 1 --min 1 --max 10 ");
	process.exit(0);
}

/* permutations info */
var permutation = [],
	MIN  = argv.min,
	MAX  = argv.max+1,
	last = _.last(string),
	len  = 0;

function setChar(curr,callback) {
	if(curr >= 0) //daca pozitia curenta in permutare exista
   	{
   		if(permutation[curr] != last) //si nu am generat ultima permutare pentru pozitia curenta
   		{
   			permutation[curr] = string[_.indexOf(string,permutation[curr])+1]; // o generam pe urmatoarea si o afisam
   			//console.log("#1 " + len);
   			callback(permutation);
   		}
   		else // in caz contrar resetam pozitia curenta, coboram o pozitie si facem incrementare daca e posibil
   		{
   			permutation[curr] = string[0];
   			setChar(curr-1, callback);
   		}
   	}
   	else //daca nu ori avansam lungimea permutarii daca nu am depasit max ori WTF?!
   	{
   		len++;
   		if(len < MAX) //avansam o pozitie in dimensiunea permutarilor
   		{
   			permutation[len-1] = string[0];
   			//console.log("#2 " + len);
   			callback(permutation);
   		}
   		else
   			callback(true); //am terminat de generat toate variantele
   	}
}

function nextPermutation(callback) {
    if(len < MIN)//generam prima permutare
    {
    	for(i=0;i<MIN;i++)
    		permutation[i] = string[0];
    	len = MIN;
    	//console.log("#3 " + len);
    	callback(permutation);
    }
    else //cautam permutarea urmatoare
   	{ 
   		setChar(len-1, callback);
   	}	 
}


function write() {
	nextPermutation(function(perm) { 
		if(typeof(perm) != 'object') process.exit(0);
		stream.write(perm.join('') + "\n", function() {
			write();
		}); 
	});
}

write();

Etichete: despre nodejsgenereaza wordlist in nodejsjavascriptnode package managernodejsopen sourcetutorial nodejs

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior Cum poți recupera o partiție de Truecrypt dacă e corupt MBR-ul?
  • Articolul următor INDECT – proiectul ce duce spionajul cibernetic la extrem sau salvarea cetățenilor din Europa?

  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • mai 2022
    L Ma Mi J V S D
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • Javascript, Ajax, jQuery
  • Cum să generezi permutări în node.js?
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons