Sunteți pe pagina 1din 3

package chatingim;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.Signature;
import org.bouncycastle.jce.interfaces.ECPrivateKey;
import org.bouncycastle.jce.interfaces.ECPublicKey;
import org.bouncycastle.jce.spec.ECParameterSpec;
import org.bouncycastle.jce.spec.ECPrivateKeySpec;
import org.bouncycastle.jce.spec.ECPublicKeySpec;
import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.util.encoders.Hex;
/**
* Simple example showing signature creation and verification using ECDSA
*/
public class ECDSA
{
public static void main(
String[] args)
throws Exception
{
//pembangkitan parameter ECDSA
ECCurve curve = new ECCurve.F2m(
239, // m
36, // k
new BigInteger("32010857077C5431123A46B808906756F543423E8D2787757812
5778AC76", 16), // a
new BigInteger("790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C4
22AA8C16", 16)); // b
ECParameterSpec params = new ECParameterSpec(
curve,
curve.decodePoint(Hex.decode("0457927098FA932E7C0A96D3FD5B706EF7E5F5
C156E16B7E7C86038552E91D61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A961
6305")), // G
new BigInteger("2208558830972980411979121875928648145578869937767132
30936715041207411783"), // n
BigInteger.valueOf(4)); // h
ECPrivateKeySpec priKeySpec = new ECPrivateKeySpec(
new BigInteger("1456427555219115346513212300075341883043918714616464
61466464667494947990"), // d
params);
ECPublicKeySpec pubKeySpec = new ECPublicKeySpec(
curve.decodePoint(Hex.decode("045894609CCECF9A9253FFFFFFDEC1A888E96C
97CCB8F5ABB5A688A238DEED6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F
57F5")), // Q
params);

// input pesan
System.out.println("Please enter the plaintext...");
BufferedReader plain = new BufferedReader(new InputStreamReader(System.i
n));
String pesan = plain.readLine();
byte[] message = pesan.getBytes();
// String berita = new sun.misc.BASE64Encoder().encode(message.toString()
.getBytes());
//System.out.println("pesan dalam BASE64 setelah di convert:"+berita);
//convert byte to ASCII penting man
String stringberita = new String(message, "US-ASCII");
System.out.println("pesan dalam ASCII yang akan anda tandatangani adalah
:"+stringberita.toUpperCase());
// pembangkitan pasangan kunci
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(params, new SecureRandom());
KeyPair keyPair = g.generateKeyPair();
//mengambil ECDSA dari lib bouncycastle
Signature signature = Signature.getInstance("ECDSA", "BC");
ECPrivateKey sKey = (ECPrivateKey)keyPair.getPrivate();
ECPublicKey vKey = (ECPublicKey)keyPair.getPublic();
System.out.println(sKey);
System.out.println(vKey);
String kunciPrivat =new sun.misc.BASE64Encoder().encode(sKey.toString().getBytes
());
String kunciPublik =new sun.misc.BASE64Encoder().encode(vKey.toString().getBytes
());
System.out.println("Kunci Publik :\n"+ kunciPublik +"\n" );
System.out.println("Kunci Privat :\n"+ kunciPrivat +"\n" );

// generate a signature
signature.initSign(keyPair.getPrivate(), Utils.createFixedRandom());
//penandatanganan pesan
signature.update(message);
byte[] sigBytes = signature.sign();

//signature dalam BASE64


/*String Signature =new sun.misc.BASE64Encoder().encode(sigBytes.toStrin
g().getBytes());
System.out.println("signature dalam Char :"+Signature.toString());*/
//Signature dalam Hexa dan ASCII
String SignatureHex = new String (Hex.encode(sigBytes));
System.out.println("signature dalam Hexa :"+"\n"+SignatureHex.toUpperCa
se());
System.out.println("panjang signature ECDSA :"+SignatureHex.length());
//Signature dalam ASCII
/* String stringSign = new String(sigBytes, "US-ASCII");
System.out.println("signature dalam ASCII :"+stringSign.toUpperCase());
*/
// verify a signature
signature.initVerify(keyPair.getPublic());
signature.update(message);
if (signature.verify(sigBytes))
{
System.out.println("signature verification succeeded.");
}
else
{
System.out.println("signature verification failed.");
}
}
}

S-ar putea să vă placă și