#include <stdio.h>
#include <string.h>
void ordinals( const char * string, int * result, int * size) {
* size = 0 ;
while ( * string) {
result[ ( * size) ++ ] = ( int ) ( * string++ ) ;
}
}
void encode( const int * ords_list, int size, int * result) {
for ( int i = 0 ; i < size; i++ ) {
result[ i] = ords_list[ i] ^ 'a' ;
}
}
void characters( const int * ords_list, int size, char * result) {
for ( int i = 0 ; i < size; i++ ) {
result[ i] = ( char ) ords_list[ i] ;
}
result[ size] = '\0 ' ; // Null-terminate the string
}
int main( ) {
int encrypted_flag[ ] = { 54 , 9 , 8 , 18 , 17 , 4 , 19 , 4 , 5 , 53 , 14 , 15 , 4 , 18 } ;
int decoded_flag[ 14 ] ;
char flag[ 15 ] ; // Adjust size for null terminator
int size;
encode( encrypted_flag, 14 , decoded_flag) ;
characters( decoded_flag, 14 , flag) ;
char attempt[ 100 ] ; // Buffer for user input
printf ( "enter passphrase here: " ) ; fgets ( attempt
, sizeof ( attempt
) , stdin
) ; attempt
[ strcspn ( attempt
, "\n " ) ] = 0 ; // Remove newline character
if ( strcmp ( attempt
, flag
) == 0 ) { printf ( "congratulations, welcome to the secret program!\n " ) ; } else {
printf ( "incorrect passphrase\n " ) ; }
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgb3JkaW5hbHMoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgKnJlc3VsdCwgaW50ICpzaXplKSB7CiAgICAqc2l6ZSA9IDA7CiAgICB3aGlsZSAoKnN0cmluZykgewogICAgICAgIHJlc3VsdFsoKnNpemUpKytdID0gKGludCkoKnN0cmluZysrKTsKICAgIH0KfQoKdm9pZCBlbmNvZGUoY29uc3QgaW50ICpvcmRzX2xpc3QsIGludCBzaXplLCBpbnQgKnJlc3VsdCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSBvcmRzX2xpc3RbaV0gXiAnYSc7CiAgICB9Cn0KCnZvaWQgY2hhcmFjdGVycyhjb25zdCBpbnQgKm9yZHNfbGlzdCwgaW50IHNpemUsIGNoYXIgKnJlc3VsdCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSAoY2hhcilvcmRzX2xpc3RbaV07CiAgICB9CiAgICByZXN1bHRbc2l6ZV0gPSAnXDAnOyAvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgc3RyaW5nCn0KCmludCBtYWluKCkgewogICAgaW50IGVuY3J5cHRlZF9mbGFnW10gPSB7NTQsIDksIDgsIDE4LCAxNywgNCwgMTksIDQsIDUsIDUzLCAxNCwgMTUsIDQsIDE4fTsKICAgIGludCBkZWNvZGVkX2ZsYWdbMTRdOwogICAgY2hhciBmbGFnWzE1XTsgLy8gQWRqdXN0IHNpemUgZm9yIG51bGwgdGVybWluYXRvcgogICAgaW50IHNpemU7CgogICAgZW5jb2RlKGVuY3J5cHRlZF9mbGFnLCAxNCwgZGVjb2RlZF9mbGFnKTsKICAgIGNoYXJhY3RlcnMoZGVjb2RlZF9mbGFnLCAxNCwgZmxhZyk7CgogICAgY2hhciBhdHRlbXB0WzEwMF07IC8vIEJ1ZmZlciBmb3IgdXNlciBpbnB1dAogICAgcHJpbnRmKCJlbnRlciBwYXNzcGhyYXNlIGhlcmU6ICIpOwogICAgZmdldHMoYXR0ZW1wdCwgc2l6ZW9mKGF0dGVtcHQpLCBzdGRpbik7CiAgICBhdHRlbXB0W3N0cmNzcG4oYXR0ZW1wdCwgIlxuIildID0gMDsgLy8gUmVtb3ZlIG5ld2xpbmUgY2hhcmFjdGVyCgogICAgaWYgKHN0cmNtcChhdHRlbXB0LCBmbGFnKSA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJjb25ncmF0dWxhdGlvbnMsIHdlbGNvbWUgdG8gdGhlIHNlY3JldCBwcm9ncmFtIVxuIik7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiaW5jb3JyZWN0IHBhc3NwaHJhc2VcbiIpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cgo=
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);
}