<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.62</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.13</version>
</dependency>
</dependencies>
package com.aryo;
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.*; Page 1 of 6
Java-RSAonMemory
import java.security.*;
import org.bouncycastle.crypto.AsymmetricBlockCipher;
import org.bouncycastle.crypto.engines.RSAEngine;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.util.PrivateKeyFactory;
import org.bouncycastle.crypto.util.PublicKeyFactory;
/**
* Created by aryo on 14-Feb-2017.
*
* Proses Kriptografi RSA pada memori saja
* 1. Membangkitkan pasangan kunci (publicKey dan privateKey)
* 2. Melakukan enkripsi dengan kunci publicKey
* 3. Melakukan dekripsi dengan kunci privateKey
*/
public class RSAwithBC {
int keySize; // contoh keySize : 1024 atau 2048
public RSAwithBC() {
this.keySize = 1024;
}
/**
* Bagian 1: Pembangkitan pasangan kunci
* methods: generate(), createFixedRandom().
* inner class: FixedRand.
*/
public KeyPair generatePairKey() {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
return keypair;
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
/*** akhir bagian pembangkitan pasangan kunci ***/
/** Page 2 of 6
Java-RSAonMemory
/**
* Bagian 2: Enkripsi String menggunakan kunci publik
* methods: encrypt(...)
*/
public String encrypt(Key keyPublic, String inputData) {
String encryptedData = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
//System.out.println(getHexString(hexEncodedCipher));
encryptedData = getHexString(hexEncodedCipher);
} catch (Exception e) {
System.out.println(e);
}
return encryptedData;
}
/*** Akhir bagian Enkripsi String menggunakan kunci publik ***/
/**
* Bagian 3: Dekripsi String menggunakan kunci private
* methods: decrypt(...)
*/
public String decrypt(Key keyPrivate, String encryptedData) {
String outputData = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
//System.out.println(new String(hexEncodedCipher));
outputData = new String(hexEncodedCipher);
} catch (Exception e) {
System.out.println(e.toString());
}
return outputData;
}
/*** akhir bagian dekripsi menggunakan kunci private ***/
Page 3 of 6
Java-RSAonMemory
private class FixedRand extends SecureRandom {
// menghilangkan warning untuk SecureRandom
private static final long serialVersionUID = 1L;
MessageDigest sha;
byte[] state;
FixedRand() {
try {
this.sha = MessageDigest.getInstance("SHA-1");
this.state = sha.digest();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("gagal mendapatkan SHA-1!");
}
}
package com.aryo;
import java.security.Key;
import java.security.KeyPair;
import java.util.Scanner;
import org.apache.commons.codec.binary.Base64;
/**
* Algoritma RSA dengan paket library Bouncy Castle. Key pair berada di memori
*
*/
public class App {
public static void main(String[] args) {
Key kunciPublik = null;
Key kunciPrivate = null;
String isWantDemoAgain;
do {
// Pembangkitan pasangan kunci
System.out.print("Ingin membuat pasangan kunci di memori (y/n) ? ");
String isCreatePairKey = inputKeyboard.nextLine();
if (isCreatePairKey.equalsIgnoreCase("y")) {
KeyPair pasanganKunci = rsaBC.generatePairKey();
kunciPublik = pasanganKunci.getPublic();
kunciPrivate = pasanganKunci.getPrivate();
System.out.println("Kunci Publik : \n" + Base64.encodeBase64(kunciPublik.getEncoded())
+ "\n");
System.out.println("Kunci Private : \n" +
Base64.encodeBase64(kunciPrivate.getEncoded()) + "\n");
}
Page 5 of 6
Java-RSAonMemory
String chipertext = rsaBC.encrypt(kunciPublik, plaintext);
System.out.println("Chipertext : " + chipertext + "\n");
}
Struktur Project
Struktur project seharusnya akan memiliki pola :
|---Project_Directory
|---src
|---main_package
|--- App.java
|--- RSAwithBC.java
|---pom.xml
Referensi
https://www.mysamplecode.com/2011/08/rsa-encryption-decryption-using-bouncy.html
Page 6 of 6