Untitled
unknown
plain_text
2 years ago
2.9 kB
7
Indexable
#include <stdio.h>
#include <string.h>
#include <openssl/bn.h>
// Συνάρτηση για την εκτύπωση των BIGNUMs
void print_bn(const char *name, BIGNUM *bn) {
printf("%s: %s\n", name, BN_bn2hex(bn));
}
int main() {
// Δηλώσεις των πρώτων αριθμών p, q και του επιλεγμένου αριθμού e
char *p_hex = "F7E75FDC469067FFDC4E847C51F452DF";
char *q_hex = "E85CED54AF57E53E092113E62F436F4F";
char *e_hex = "0D88C3";
// Δηλώσεις μεταβλητών για την αποθήκευση των τιμών των p, q, e σε μορφή BIGNUMA
BIGNUM *p = NULL;
BIGNUM *q = NULL;
BIGNUM *e = NULL;
// Αρχικοποίηση των BIGNUM με τις δεκαεξαδικές τιμές
BN_hex2bn(&p, p_hex);
BN_hex2bn(&q, q_hex);
BN_hex2bn(&e, e_hex);
// Υπολογισμός του N (modulo)
BIGNUM *N = BN_new();
BN_mul(N, p, q, NULL);
// Υπολογισμός του Φ(N)
BIGNUM *p_minus_1 = BN_new();
BIGNUM *q_minus_1 = BN_new();
BN_sub(p_minus_1, p, BN_value_one());
BN_sub(q_minus_1, q, BN_value_one());
BIGNUM *phi_N = BN_new();
BN_mul(phi_N, p_minus_1, q_minus_1, NULL);
// Υπολογισμός του ιδιωτικού κλειδιού d
BIGNUM *d = BN_new();
BN_mod_inverse(d, e, phi_N, NULL);
// Εκτύπωση των τιμών του RSA κρυπτοσυστήματος
print_bn("Modulo N", N);
print_bn("Φ(N)", phi_N);
print_bn("Ιδιωτικό κλειδί d", d);
// Μήνυμα προς κρυπτογράφηση (Onoma Eponymo)
char *message_ascii = "Marios Bratoss";
printf("Αρχικό μήνυμα: %s\n", message_ascii);
// Μετατροπή του μηνύματος από ASCII σε δεκαεξαδική συμβολοσειρά
BIGNUM *message_bn = BN_new();
BN_hex2bn(&message_bn, message_ascii);
printf("Μήνυμα σε δεκαεξαδική: %s\n", BN_bn2hex(message_bn));
// Κρυπτογράφηση του μηνύματος
BIGNUM *encrypted_message = BN_new();
BN_mod_exp(encrypted_message, message_bn, e, N, NULL);
printf("Κρυπτογραφημένο μήνυμα: %s\n", BN_bn2hex(encrypted_message));
// Αποκρυπτογράφηση του κρυπτογραφημένου μηνύματος
BIGNUM *decrypted_message = BN_new();
BN_mod_exp(decrypted_message, encrypted_message, d, N, NULL);
printf("Αποκρυπτογραφημένο μήνυμα: %s\n", BN_bn2hex(decrypted_message));
// Απελευθέρωση μνήμης
BN_free(p);
BN_free(q);
BN_free(e);
BN_free(N);
BN_free(p_minus_1);
BN_free(q_minus_1);
BN_free(phi_N);
BN_free(d);
BN_free(message_bn);
BN_free(encrypted_message);
BN_free(decrypted_message);
return 0;
}
Editor is loading...
Leave a Comment