Untitled
unknown
plain_text
a year ago
2.9 kB
4
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