Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
2.9 kB
1
Indexable
Never
#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;
}
Leave a Comment