Gehaxelts Blog

IT-Security & Hacking

[C++] Passwortgenerator/ PassGen Klasse

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

Tools

« [C++] Utils Klasse [Java] Cäsarverschlüsselung »