Ich versuche ein C-Programm zu erstellen, um eine unbekannte Zeichenfolge zu finden, die einer gegebenen SHA256-Summe entspricht. Das endgültige Programm sollte Zeichenfolgen des Formats "### ENCRYPTION" generieren, dann die SHA-Summe finden und mit dem bekannten Wert vergleichen. Allerdings habe ich Probleme, einfach die SHA-Summe zu generieren. Aus irgendeinem Grund, meine Methode, um die Summe der Druck fällt ab 1 Zeichen:Drucken SHA256 Summe
000ENCRYPTION=f6bc212596f37e1855fb2bbfaf49b514c5ea79e332c57bb6**0**c493bafd38baff5
Aber mein Code generiert:
000ENCRYPTION=f6bc212596f37e1855fb2bbfaf49b514c5ea79e332c57bb6c493bafd38baff5
This link scheint ein ähnliches Problem zu beschreiben, scheint aber nicht ganz passt meine Problem.
Ich habe bereits ein Programm in Python gebaut, um das gleiche zu tun, aber jetzt möchte ich eine in C bauen, um Laufzeiten zu vergleichen. (Ich benutzte auch die CommonCrypto-Bibliothek von OS X, aber OpenSSL würde auch funktionieren.)
Jede Hilfe würde sehr geschätzt werden!
#include <stdio.h>
#include <CommonCrypto/CommonDigest.h>
#include <string.h>
int main() {
int c=0;
char *input_sum="9dcaea0ae17e31d47640cb7c390976d8962823a55ea03fe43b0d061f5624069f"; // currently unused
char *end="ENCRYPTION";
char temp[100]; // need to learn more about allocating memory
unsigned char output[32]; // initializes output variable
printf("Sum=f6bc212596f37e1855fb2bbfaf49b514c5ea79e332c57bb60c493bafd38baff5\n"); // Sum of 000ENCRYPTION from command line
while(c < 5) { // limited to 5 right now for testing
sprintf(temp, "%03d", c); // creates leading zeros
sprintf(temp + 3, "%s", end); // appends string "end"; should ideally be moved outside loop
c++;
puts(temp); // visual check of input into cc_sha256
CC_SHA256(temp, (CC_LONG)strlen(temp), output); // function does sha256sum
int i; // for loop prints resulting byte array from cc_sha256 to hex; I believe the problem is here
for (i = 0; i < 32; i++) {
printf("%x", output[i]);
}
printf("\n");
}
return 0;
}
Es kompiliert in beide Richtungen. Ich versuche beide, die Sichtbarkeit zu erhöhen – MEcoder
Sie erkennen, dass das Finden einer gegebenen Zeichenfolge, die Hashes zu einem bestimmten SHA256 Hash hat, wahrscheinlich durchschnittlich 2^256 Versuche erfordern wird, nehme ich an? Zwei verschiedene Strings zu finden, die auf denselben Wert hashen, wäre etwas einfacher, aber im Durchschnitt werden 2^255 Versuche benötigt ... Selbst wenn Sie 1.000.000.000 pro Sekunde ausprobieren können, wird dies in der Größenordnung von 1.8 * 10^60 erforderlich sein Jahre bis zum Abschluss ... – twalberg
In diesem Fall ist das Format der Hash-Zeichenfolge bekannt (### ENCRYPTION), so dass maximal 1000 Versuche benötigt werden. – MEcoder