#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// Array 1: Alphanumeric characters (letters + digits)
char alphanumeric[ ] = "abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789" ;
// Array 2: Special characters
char special_chars[ ] = "!@#$%^&*()_+-=[]{}|;:,.<>?/~" ;
char get_random_char( char * array, int length) ;
void shuffle_password( char * str, int length) ;
void copy_to_clipboard( const char * text) ;
int main( void ) {
char len_password;
char password[ 18 ] = "" ;
int len_alphanumeric
= strlen ( alphanumeric
) ; int len_special_chars
= strlen ( special_chars
) ;
printf ( " ========================================\n " ) ; printf ( " PhoenixPasswordGen v1.0 \n " ) ; printf ( " ========================================\n " ) ; printf ( " Created by Ph0en1x \n " ) ; printf ( " ========================================\n " ) ; printf ( " Choose Password Length: \n " ) ; printf ( " [1] ======== 8 symbols \n " ) ; printf ( " [2] ================ 16 symbols \n " ) ; printf ( " ========================================\n " ) ; printf ( " Enter your choice: " ) ;
int choice;
if ( choice == 1 ) {
len_password = 8 ;
} else if ( choice == 2 ) {
len_password = 16 ;
} else {
printf ( "\n Invalid! Defaulting to 8 symbols.\n " ) ; len_password = 8 ;
}
printf ( " ========================================\n \n " ) ;
for ( int i = 0 ; i <= len_password; ++ i) {
char char_for_password = '0' ;
if ( i < len_password / 2 ) {
char_for_password = get_random_char( alphanumeric, len_alphanumeric) ;
}
else {
char_for_password = get_random_char( special_chars, len_special_chars) ;
}
if ( i == len_password) {
* ( password + i) = '\0 ' ;
break ;
}
* ( password + i) = char_for_password;
}
shuffle_password( password, len_password) ;
printf ( "Your password is %s\n " , password
) ; printf ( "Remember or copy it!\n " ) ; return 0 ;
}
char get_random_char( char * array, int length) {
int random_num
= rand ( ) % length
; char random_char = * ( array + random_num) ;
return random_char;
}
void shuffle_password( char * str, int length) {
for ( int i = length - 1 ; i > 0 ; -- i) {
int random_choice
= rand ( ) % length
;
char temp = * ( str + i) ;
* ( str + i) = * ( str + random_choice) ;
* ( str + random_choice) = temp;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgoKLy8gQXJyYXkgMTogQWxwaGFudW1lcmljIGNoYXJhY3RlcnMgKGxldHRlcnMgKyBkaWdpdHMpCmNoYXIgYWxwaGFudW1lcmljW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICAgICAgICAgICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCiAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSI7CgovLyBBcnJheSAyOiBTcGVjaWFsIGNoYXJhY3RlcnMKY2hhciBzcGVjaWFsX2NoYXJzW10gPSAiIUAjJCVeJiooKV8rLT1bXXt9fDs6LC48Pj8vfiI7CgpjaGFyIGdldF9yYW5kb21fY2hhcihjaGFyICphcnJheSwgaW50IGxlbmd0aCk7CnZvaWQgc2h1ZmZsZV9wYXNzd29yZChjaGFyICpzdHIsIGludCBsZW5ndGgpOwp2b2lkIGNvcHlfdG9fY2xpcGJvYXJkKGNvbnN0IGNoYXIgKnRleHQpOwoKaW50IG1haW4odm9pZCl7CiAgICBjaGFyIGxlbl9wYXNzd29yZDsKICAgIGNoYXIgcGFzc3dvcmRbMThdID0gIiI7CgogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBpbnQgbGVuX2FscGhhbnVtZXJpYyA9IHN0cmxlbihhbHBoYW51bWVyaWMpOwogICAgaW50IGxlbl9zcGVjaWFsX2NoYXJzID0gc3RybGVuKHNwZWNpYWxfY2hhcnMpOwoKICAgIHByaW50ZigiXG4iKTsKICAgIHByaW50ZigiICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKICAgIHByaW50ZigiICAgICAgICAgUGhvZW5peFBhc3N3b3JkR2VuIHYxLjAgICAgICAgICBcbiIpOwogICAgcHJpbnRmKCIgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgcHJpbnRmKCIgICAgICAgICAgICAgIENyZWF0ZWQgYnkgUGgwZW4xeCAgICAgICAgIFxuIik7CiAgICBwcmludGYoIiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIik7CiAgICBwcmludGYoIiAgICAgICBDaG9vc2UgUGFzc3dvcmQgTGVuZ3RoOiAgICAgICAgICAgXG4iKTsKICAgIHByaW50ZigiICAgICAgIFsxXSA9PT09PT09PSA4IHN5bWJvbHMgICAgICAgICAgICBcbiIpOwogICAgcHJpbnRmKCIgICAgICAgWzJdID09PT09PT09PT09PT09PT0gMTYgc3ltYm9scyAgIFxuIik7CiAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIik7CiAgICBwcmludGYoIiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgICBwcmludGYoIiAgIEVudGVyIHlvdXIgY2hvaWNlOiAiKTsKCiAgICBpbnQgY2hvaWNlOwogICAgc2NhbmYoIiVkIiwgJmNob2ljZSk7CgogICAgaWYgKGNob2ljZSA9PSAxKSB7CiAgICAgICAgbGVuX3Bhc3N3b3JkID0gODsKICAgIH0gZWxzZSBpZiAoY2hvaWNlID09IDIpIHsKICAgICAgICBsZW5fcGFzc3dvcmQgPSAxNjsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJcbiAgSW52YWxpZCEgRGVmYXVsdGluZyB0byA4IHN5bWJvbHMuXG4iKTsKICAgICAgICBsZW5fcGFzc3dvcmQgPSA4OwogICAgfQoKICAgIHByaW50ZigiICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gbGVuX3Bhc3N3b3JkOyArK2kpewogICAgICAgIGNoYXIgY2hhcl9mb3JfcGFzc3dvcmQgPSAnMCc7CiAgICAgICAgaWYoaSA8IGxlbl9wYXNzd29yZCAvIDIpewogICAgICAgICAgICBjaGFyX2Zvcl9wYXNzd29yZCA9IGdldF9yYW5kb21fY2hhcihhbHBoYW51bWVyaWMsIGxlbl9hbHBoYW51bWVyaWMpOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBjaGFyX2Zvcl9wYXNzd29yZCA9IGdldF9yYW5kb21fY2hhcihzcGVjaWFsX2NoYXJzLCBsZW5fc3BlY2lhbF9jaGFycyk7CiAgICAgICAgfQogICAgICAgIGlmKGkgPT0gbGVuX3Bhc3N3b3JkKXsKICAgICAgICAgICAgKihwYXNzd29yZCArIGkpID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgICoocGFzc3dvcmQgKyBpKSA9IGNoYXJfZm9yX3Bhc3N3b3JkOwogICAgfQoKICAgIHNodWZmbGVfcGFzc3dvcmQocGFzc3dvcmQsIGxlbl9wYXNzd29yZCk7CgogICAgcHJpbnRmKCJZb3VyIHBhc3N3b3JkIGlzICVzXG4iLCBwYXNzd29yZCk7CiAgICBwcmludGYoIlJlbWVtYmVyIG9yIGNvcHkgaXQhXG4iKTsKICAgIHJldHVybiAwOwp9CgpjaGFyIGdldF9yYW5kb21fY2hhcihjaGFyICphcnJheSwgaW50IGxlbmd0aCl7CiAgICBpbnQgcmFuZG9tX251bSA9IHJhbmQoKSAlIGxlbmd0aDsKICAgIGNoYXIgcmFuZG9tX2NoYXIgPSAqKGFycmF5ICsgcmFuZG9tX251bSk7CiAgICByZXR1cm4gcmFuZG9tX2NoYXI7Cn0KCnZvaWQgc2h1ZmZsZV9wYXNzd29yZChjaGFyICpzdHIsIGludCBsZW5ndGgpewogICAgZm9yKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSl7CiAgICAgICAgaW50IHJhbmRvbV9jaG9pY2UgPSByYW5kKCkgJSBsZW5ndGg7CgogICAgICAgIGNoYXIgdGVtcCA9ICooc3RyICsgaSk7CiAgICAgICAgKihzdHIgKyBpKSA9ICooc3RyICsgcmFuZG9tX2Nob2ljZSk7CiAgICAgICAgKihzdHIgKyByYW5kb21fY2hvaWNlKSA9IHRlbXA7CiAgICB9Cn0K
stdin
LyogIEJlcmVjaG51bmcgZGVzIEhhbW1pbmctQWJzdGFuZGVzIHp3aXNjaGVuIHp3ZWkgMTI4LUJpdCBXZXJ0ZW4gaW4gCSovCi8qCWVpbmVyIFRleHRkYXRlaS4gCQkJCQkJCQkJCQkJCSovCi8qICBEaWUgV2VydGUgbSZ1dW1sO3NzZW4gYXVmIGVpbmVyIHNlcGFyYXRlbiBaZWlsZSBnZXNwZWljaGVydCBzZWluCQkJKi8KLyogCQkJCQkJCQkJCQkJCQkJCQkJKi8KLyoJRXJzdGVsbHQ6IDE3LjUuMjAxMAkJCQkJCQkJCQkJCQkqLwovKiAgQXV0b3I6IFRob21hcyBTY2hlZmZsZXIJCQkJCQkJCQkJCQkqLwoKI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKCiNkZWZpbmUgQVJSQVlfU0laRSAzMgoKdW5zaWduZWQgSGFtZGlzdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQp7CiAgdW5zaWduZWQgZGlzdCA9IDAsIHZhbCA9IHggXiB5OwogCiAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBzZXQgYml0cwogIHdoaWxlKHZhbCkKICB7CiAgICArK2Rpc3Q7IAogICAgdmFsICZhbXA7PSB2YWwgLSAxOwogIH0KIAogIHJldHVybiBkaXN0Owp9CgoKCmludCBtYWluICh2b2lkKQp7CgljaGFyIGhleDsKCWludCBpOwoJaW50IGFbQVJSQVlfU0laRV07CglpbnQgYltBUlJBWV9TSVpFXTsKCWludCBoYW1EaXN0ID0gMDsKCUZJTEUqIGZwOwoJCgkvL0FycmF5cyBtaXQgMCBpbml0aWFsaXNpZXJlbgoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKICAJCWFbaV0gPSAwOwogIAkJYltpXSA9IDA7Cgl9CgoJCglmcCA9IGZvcGVuKCZxdW90O2hleC50eHQmcXVvdDssJnF1b3Q7ciZxdW90Oyk7CglpZiAoZnAgPT0gTlVMTCkgCgl7CgkJcHJpbnRmKCZxdW90O0RpZSBEYXRlaSBoZXgudHh0IHd1cmRlIG5pY2h0IGdlZnVuZGVuISZxdW90Oyk7CgkJZXhpdChFWElUX0ZBSUxVUkUpOwoJfQoKCWk9MDsKCXByaW50ZigmcXVvdDsxLlplaWxlIGVpbmxlc2VuLlxuJnF1b3Q7KTsKCiAJd2hpbGUoKGhleD1mZ2V0YyhmcCkpIT0nXG4nICZhbXA7JmFtcDsgaGV4ICE9IEVPRikKICAgIHsKICAgICAgICBhW2ldPXN0cnRvbCgmYW1wO2hleCwwLDE2KTsKCQlpKys7CiAgICB9CglpPTA7CglwcmludGYoJnF1b3Q7Mi5aZWlsZSBlaW5sZXNlbi5cbiZxdW90Oyk7CgogCXdoaWxlKChoZXg9ZmdldGMoZnApKSE9J1xuJyAmYW1wOyZhbXA7IGhleCAhPSBFT0YpCiAgICB7CiAgICAJYltpXT1zdHJ0b2woJmFtcDtoZXgsMCwxNik7CiAgICAgICAgaSsrOwogICAgfQoJZmNsb3NlKGZwKTsKCglwcmludGYoJnF1b3Q7SGFtbWluZy1BYndlaWNodW5nIHBybyBOaWJibGU6XG4mcXVvdDspOwoJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkU7ICsraSkKCXsKCQlwcmludGYgKCZxdW90OyVpXHQlaVx0JWlcbiZxdW90OyxhW2ldLGJbaV0sSGFtZGlzdChhW2ldLGJbaV0pKTsKCQloYW1EaXN0ICs9IEhhbWRpc3QoYVtpXSxiW2ldKTsKCX0KCXByaW50ZiAoJnF1b3Q7XG5IYW1taW5nLUFid2VpY2h1bmcgZGVyIEhhc2gtV2VydGU6JWRcbiZxdW90OyxoYW1EaXN0KTsKfQoK
/* Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in */
/* einer Textdatei. */
/* Die Werte müssen auf einer separaten Zeile gespeichert sein */
/* */
/* Erstellt: 17.5.2010 */
/* Autor: Thomas Scheffler */
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 32
unsigned Hamdist(unsigned x, unsigned y)
{
unsigned dist = 0, val = x ^ y;
// Count the number of set bits
while(val)
{
++dist;
val &= val - 1;
}
return dist;
}
int main (void)
{
char hex;
int i;
int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
int hamDist = 0;
FILE* fp;
//Arrays mit 0 initialisieren
for (i = 0; i < ARRAY_SIZE; ++i)
{
a[i] = 0;
b[i] = 0;
}
fp = fopen("hex.txt","r");
if (fp == NULL)
{
printf("Die Datei hex.txt wurde nicht gefunden!");
exit(EXIT_FAILURE);
}
i=0;
printf("1.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
a[i]=strtol(&hex,0,16);
i++;
}
i=0;
printf("2.Zeile einlesen.\n");
while((hex=fgetc(fp))!='\n' && hex != EOF)
{
b[i]=strtol(&hex,0,16);
i++;
}
fclose(fp);
printf("Hamming-Abweichung pro Nibble:\n");
for (i = 0; i < ARRAY_SIZE; ++i)
{
printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
hamDist += Hamdist(a[i],b[i]);
}
printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}