Und eine weitere Klasse von mir, zum Generieren von Zahlen-/Zeichenketten u.a. für Passwörter geeignet.
PassGen.h:
//CopyRight to gehaxelt.in
//www.gehaxelt.in
#ifndef _PASSGEN_H_
#define _PASSGEN_H_
#include <string>
#include <vector>
using namespace std;
class PassGen
{
public:
PassGen();
~PassGen();
PassGen(const unsigned int len);
void set_Length(const unsigned int len);
void clearCS( );
void addCS(const char type);
int get_Length( );
string generate( );
private:
int* len;
vector<char>* CS;
int random(int min, int max);
};
#endif // _PASSGEN_H_
PassGen.cpp:
#include "PassGen.h"
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
PassGen::PassGen()
{
this->len= new int(0);
this->CS= new vector<char>;
srand(time(NULL));
}
PassGen::~PassGen()
{
delete this->len;
delete this->CS;
}
PassGen::PassGen(const unsigned int len)
{
this->len=new int(len);
this->CS= new vector<char>;
srand(time(NULL));
}
void PassGen::set_Length(const unsigned int len)
{
*this->len=len;
}
int PassGen::get_Length()
{
return *this->len;
}
string PassGen::generate()
{
string* tmp=new string("");
int* CS_max = new int((*this->CS).size()-1);
for(int i=0;i<*this->len;i++)
{
*tmp += (*this->CS)[random(0,*CS_max)];
}
delete CS_max;
return *tmp;
}
void PassGen::addCS(const char type)
{
switch((int) type)
{
case 65: //Großbuchstaben 65-90
for(int i=65;i<90;i++)
{
(*this->CS).push_back((char) i);
}
break;
case 97: // Kleinbuchstaben 97-122
for(int i=97;i<122;i++)
{
(*this->CS).push_back((char)i);
}
break;
case 48: //Zahlen 48-57
for(int i=48;i<57;i++)
{
(*this->CS).push_back((char) i);
}
break;
case 33: //Sonderzeichen 33-47 ; 58-64; 91-96; 123-126;
for(int i=33;i<47;i++)
{
(*this->CS).push_back((char) i);
}
for(int i=58;i<64;i++)
{
(*this->CS).push_back((char) i);
}
for(int i=91;i<96;i++)
{
(*this->CS).push_back((char) i);
}
for(int i=123;i<126;i++)
{
(*this->CS).push_back((char) i);
}
break;
}
}
void PassGen::clearCS()
{
(*this->CS).clear();
}
int PassGen::random(int min, int max)
{
return min + rand()%(max-min+1);
}
Um die verschiedenen Literale dem Generator hinzuzufügen muss man die Methode “addCS” aufrufen und einen der verschiedenen Anfangsliterale des Literalbereiches angeben.
Beispiel:
#include <iostream>
#include "PassGen.h"
using namespace std;
int main()
{
PassGen* pg = new PassGen;
pg->set_Length(10);
pg->addCS('0');
cout << pg->generate()<<endl;
pg->addCS('a');
cout << pg->generate()<<endl;
pg->addCS('A');
cout << pg->generate()<<endl;
pg->addCS('!');
cout << pg->generate()<<endl;
delete pg;
return 0;
}
Die Nutzung ist soweit frei, ich würde mich jedoch freuen, wenn ihr Ergänzungen/Änderungen an dem Code vorgenommen habt, und mir kurz mitteilt was genau geändert wurde, damit ich das ggf. hier bearbeiten kann.
Gruß gehaxelt