Skip to content

Instantly share code, notes, and snippets.

@rhonyabdullah
Last active February 24, 2016 00:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rhonyabdullah/c6ef5d4e0564ac54b199 to your computer and use it in GitHub Desktop.
Save rhonyabdullah/c6ef5d4e0564ac54b199 to your computer and use it in GitHub Desktop.
Contoh tentang bagaimana menggunakan digital signature ECDSA menggunakan library java. Materi penjelasan bisa di baca melalui blog "Penggunaan ECDSA" http://bit.ly/menggunakan_ecdsa
import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
import com.sun.org.apache.xml.internal.security.utils.Base64;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
public class Alice_Bob_ECDSA {
public static void main (String [] args) throws NoSuchAlgorithmException,
InvalidKeyException, SignatureException, Base64DecodingException,
InvalidKeySpecException
{
//Generate kunci publik dan kunci private
System.out.println("Alice men-generate kunci Private dan kunci Publik miliknya ...");
KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("EC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
keyGenerator.initialize(256, random);
KeyPair keyPair = keyGenerator.genKeyPair();
//Alice
//Ambil kunci private kemudian simpan ke dalam bentuk string
PrivateKey privateKey = keyPair.getPrivate();
byte[] encodedPrivateKey = privateKey.getEncoded();
String kunciPrivate = Base64.encode(encodedPrivateKey);// <----------- Kunci Private Alice
System.out.println("\nKunci private Alice : " + kunciPrivate);
//Ambil kunci Publik kemudian simpan ke dalam bentuk string
PublicKey publicKey = keyPair.getPublic();
byte[] encodedPublicKey = publicKey.getEncoded();
String kunciPublik = Base64.encode(encodedPublicKey);// <-------------- Kunci Publik Alice
System.out.println("\nKunci publik Alice : "+ kunciPublik);
String pesan = "Hai bob ! Selamat pagi, kapan menikah ?";
System.out.println("\nPesan Alice : " + pesan
+ "\n\nAlice menandatangani pesan menggunakan ECDSA ...");
Signature ecdsa = Signature.getInstance("SHA1withECDSA");
ecdsa.initSign(privateKey);
ecdsa.update(pesan.getBytes());
byte[] tandatanganDigital = ecdsa.sign();
String tandaTanganDigital = Base64.encode(tandatanganDigital);
System.out.println("\nAlice memperoleh tanda tangan digital : "+ tandaTanganDigital +
"\n\nKirim pesan asli dan tanda tangan digital kepada Bob"+
"\n\n\nBob memperoleh pesan & tanda tangan digital"+
"\n\nBob mengambil kunci publik milik Alice dan melakukan verifikasi tanda tangan digital");
// Bob
byte[] ttDigital = Base64.decode(tandaTanganDigital);
byte[] byteKunciPublik = Base64.decode(kunciPublik);
boolean success;
X509EncodedKeySpec formatted_public = new X509EncodedKeySpec(byteKunciPublik);
KeyFactory kf = KeyFactory.getInstance("EC");
PublicKey publikKey = kf.generatePublic(formatted_public);
Signature ECDSA = Signature.getInstance("SHA1withECDSA");
ECDSA.initVerify(publikKey);
ECDSA.update(pesan.getBytes());
success = ECDSA.verify(ttDigital);
if (success == true){
System.out.printf("\nPesan '%s' berhasil diverifikasi\n\n",pesan);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment