Show
Pada artikel ini, saya telah menjelaskan bagaimana melakukan Enkripsi dan Dekripsi RSA dengan OpenSSL Library di C 1). Hasilkan kunci RSA dengan OpenSSLGunakan perintah di bawah ini untuk menghasilkan kunci RSA dengan panjang 2048 openssl genrsa -out private.pem 2048 Ekstrak kunci publik dari pribadi. pem dengan perintah berikut openssl rsa -in private.pem -outform PEM -pubout -out public.pem_ publik. pem adalah kunci publik RSA dalam format PEM 2). Enkripsi Publik dan Dekripsi PribadiDi bawah ini adalah API OpenSSL untuk enkripsi Publik dan dekripsi Pribadi int RSA_public_encrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding);
2. 1 Mempersiapkan Struktur RSA RSA * createRSA(unsigned char * key,int public) { RSA *rsa= NULL; BIO *keybio ; keybio = BIO_new_mem_buf(key, -1); if (keybio==NULL) { printf( "Failed to create key BIO"); return 0; } if(public) { rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa,NULL, NULL); } else { rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa,NULL, NULL); } return rsa; } Penggunaan untuk kunci publik. createRSA(“PUBLIC_KEY_BUFFER”,1); Jika Anda ingin membuat RSA dengan nama file kunci, Anda dapat menggunakan fungsi ini RSA * createRSAWithFilename(char * filename,int public) { FILE * fp = fopen(filename,"rb"); if(fp == NULL) { printf("Unable to open file %s \n",filename); return NULL; } RSA *rsa= RSA_new() ; if(public) { rsa = PEM_read_RSA_PUBKEY(fp, &rsa,NULL, NULL); } else { rsa = PEM_read_RSAPrivateKey(fp, &rsa,NULL, NULL); } return rsa; }_
2. 1 Enkripsi Kunci Publik RSA_PKCS1_PADDING Anda dapat menggunakan metode di bawah ini, untuk mengenkripsi data dengan kunci publik int padding = RSA_PKCS1_PADDING; int public_encrypt(unsigned char * data,int data_len,unsigned char * key, unsigned char *encrypted) { RSA * rsa = createRSA(key,1); int result = RSA_public_encrypt(data_len,data,encrypted,rsa,padding); return result; } Catatan. enkripsi kunci publik mendukung semua bantalan 2. 2 Dekripsi Pribadi int private_decrypt(unsigned char * enc_data,int data_len,unsigned char * key, unsigned char *decrypted) { RSA * rsa = createRSA(key,0); int result = RSA_private_decrypt(data_len,enc_data,decrypted,rsa,padding); return result; }_
3). Enkripsi Kunci Pribadi dan Dekripsi Kunci PublikDi bawah ini adalah API OpenSSL untuk enkripsi pribadi dan dekripsi publik int RSA_private_encrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_public_decrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding); Catatan. enkripsi kunci pribadi hanya mendukung bantalan ini. RSA_PKCS1_PADDING dan RSA_NO_PADDING 3. 1 Enkripsi Kunci Pribadi int private_encrypt(unsigned char * data,int data_len,unsigned char * key, unsigned char *encrypted) { RSA * rsa = createRSA(key,0); int result = RSA_private_encrypt(data_len,data,encrypted,rsa,padding); return result; }_ 3. 2 Dekripsi Kunci Publik int public_decrypt(unsigned char * enc_data,int data_len,unsigned char * key, unsigned char *decrypted) { RSA * rsa = createRSA(key,1); int result = RSA_public_decrypt(data_len,enc_data,decrypted,rsa,padding); return result; }_ 4) Enkripsi dan Dekripsi Contoh kodeopenssl rsa -in private.pem -outform PEM -pubout -out public.pem_0 Referensi. dokumentasi openssl Apa yang dimaksud decrypt Encrypt?Enkripsi adalah proses penyandian yang mengubah teks atau pesan asli yang dapat dipahami (plaintext) menjadi teks kode atau pesan yang tidak dapat dipahami (ciphertext). Dekripsi adalah proses pembalikan yang mengubah kode atau pesan yang tidak dapat dipahami (ciphertext) menjadi teks asli.
Apa yang dimaksud dengan Dekripsi?Sebelum dikirim, teks akan melalui proses yang disebut dekripsi. Proses tersebut adalah proses yang mengubah teks acak menjadi teks normal atau plaintext . Dekripsi ini hanya dapat terjadi jika orang memiliki atau diberi akses untuk melihat data yang dienkripsi. |