/* * $Id: rsa-1.c,v 1.3 2005年02月19日 16:01:53 68user Exp $ * * OpenSSL を使った RSA の実装 (1) * 素数生成・RSA 鍵生成・暗号化・復号化を全てライブラリにまかせる版。 * * written by 68user http://X68000.q-e-d.net/~68user/ */ #include #include #include #include #include #include #define BN_PUT(bn) { printf(#bn "=%s (0x%s)\n", BN_bn2dec(bn), BN_bn2hex(bn)); } #define KEYBIT_LEN 192 int main(){ unsigned char plain_buf[]="hogehoge"; unsigned char *crypted_buf; unsigned char *decrypted_buf; int crypted_len; int decrypted_len; char errbuf[1024]; RSA *rsa; ERR_load_crypto_strings(); /* RSA 鍵生成 */ rsa = RSA_generate_key(KEYBIT_LEN, 65537, NULL, NULL); if ( rsa == NULL ){ printf("in generate_key: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); return 1; } BN_PUT(rsa->p); BN_PUT(rsa->q); BN_PUT(rsa->n); BN_PUT(rsa->e); BN_PUT(rsa->d); /* 暗号文・復号文の領域を確保 */ crypted_buf = malloc(RSA_size(rsa)); if ( crypted_buf == NULL ){ perror("malloc"); goto ERR; } decrypted_buf = malloc(RSA_size(rsa)); if ( decrypted_buf == NULL ){ perror("malloc"); goto ERR; } /* 暗号化 */ crypted_len = RSA_private_encrypt(strlen(plain_buf), plain_buf, crypted_buf, rsa, RSA_PKCS1_PADDING); if ( crypted_len == -1 ){ printf("in encrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } /* 復号化 */ decrypted_len = RSA_public_decrypt(crypted_len, crypted_buf, decrypted_buf, rsa, RSA_PKCS1_PADDING); if ( decrypted_len == -1 ){ printf("in decrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } printf("平文=[%s]\n", plain_buf); { int i; printf("暗号文=[0x"); for ( i=0 ; i

AltStyle によって変換されたページ (->オリジナル) /