Sie sind auf Seite 1von 10

RSA Implementation

import java.math.BigInteger;

import java.util.Random;

class SimpleRSA {

public static BigInteger p, q, N, v, k, d;

public static void main(String[] args) {

// p & q are prime numbers

Random myRandom = new Random(0);

p = BigInteger.probablePrime(512, myRandom);

q = BigInteger.probablePrime(512, myRandom);

System.out.println("Value of p:" + p);

System.out.println("Value of q:" + q);

// N = pq

N = p.multiply(q);

System.out.println("Value of N:" + N);

// v = (p-1)*(q-1)

v =(p.subtract(BigInteger.valueOf(1))).multiply(q.subtract(BigInteger.valueOf(1)));

System.out.println("Value of v:" + v);

// Compute k such that gcd(k, v) = 1

k = new BigInteger("3");

while(v.gcd(k).intValue() > 1) k = k.add(new BigInteger("2"));

System.out.println("Value of k:" + k);

// Compute d such that (d * k)%v = 1

d = k.modInverse(v);

System.out.println("Value of d:" + d);


System.out.println("Public Key (k,N): (" + k + "," + N + ")");

System.out.println("Private Key (d,N): (" + d + "," + N + ")");

// Encryption

String text = "pravesh bansal";

System.out.println("Sample text:" + text);

byte[] cipherData = text.getBytes();

BigInteger a = new BigInteger(cipherData);

System.out.println("BigInteger a:" + a);

BigInteger b = a.modPow(k, N);

System.out.println("Encrypted data:" + b);

// Decryption

BigInteger c = b.modPow(d, N);

byte[] decryptedData = c.toByteArray();

String plainText = new String(decryptedData);

System.out.println("Decrypted data:" + plainText);

}
Output
C:\Program Files\Java\jdk1.6.0_07\bin\java.exe -classpath "C:\Program
Files\Java\jdk1.6.0_07\jre\lib\rt.jar;C:\Program
Files\Java\jdk1.6.0_07\lib\tools.jar;J:\NMS" SimpleRSA
Value of
p:117686837408564885453421841793708809347228146689137677955112976839435485865199857879
50858001297977310173110996763173093591148833987835653326488053279071057
Value of
q:978416053767100196956358749326941175987797406696382576990251389340509263828043164595
8699693034030735729767115300016309578037907172526549932686180897765073
Value of
N:115146691037618399775015206138126645941683210886745085070661259313407657294202145378
90797867948401122300854224215832865062946648083833347474785936345525934024377290292344
29227303336683443297176106130949796163813268210456021393412412100478213769312776842115
92892679558448854882364554039142791087605376859792161
Value of
v:115146691037618399775015206138126645941683210886745085070661259313407657294202145378
90797867948401122300854224215832865062946648083833347474785936345525931869092862439595
24078245619957040370230098243591020228159130094682534981164407926139118192369456761656
90014567495259451713177812878780587828431142682956032
Value of k:5
Value of
d:460586764150473599100060824552506583766732843546980340282645037253630629176808581515
63191471793604489203416896863331460251786592335333389899143745382103727476371449758380
96312982479828161480920392974364080912636520378730139924657631704556472769477827046627
6005826998103780685271125151512235131372457073182413

Public Key (k,N):


(5,11514669103761839977501520613812664594168321088674508507066125931340765729420214537
89079786794840112230085422421583286506294664808383334747478593634552593402437729029234
42922730333668344329717610613094979616381326821045602139341241210047821376931277684211
592892679558448854882364554039142791087605376859792161)
Private Key (d,N):
(4605867641504735991000608245525065837667328435469803402826450372536306291768085815156
31914717936044892034168968633314602517865923353333898991437453821037274763714497583809
63129824798281614809203929743640809126365203787301399246576317045564727694778270466276
005826998103780685271125151512235131372457073182413,1151466910376183997750152061381266
45941683210886745085070661259313407657294202145378907978679484011223008542242158328650
62946648083833347474785936345525934024377290292344292273033366834432971761061309497961
63813268210456021393412412100478213769312776842115928926795584488548823645540391427910
87605376859792161)
Sample text:pravesh bansal
BigInteger a:614829825858399664849427500783203937

Encrypted
data:878566493909273651566193128130976485690987993613060869654571672080342559863388160
62993171026906727449286884065773744742817094148101294006849261084472064961571993469872
929822783457
Decrypted data:pravesh bansal
Finished executing
DIGITAL SIGNATURE IMPLEMENTATION

//GenSig.java – Generate digital signature


import java.io.*;
import java.security.*;

class GenSig {

public static void main(String[] args)


{

if (args.length != 1)
{
System.out.println("Usage: GenSig nameOfFileToSign");
}
else try
{

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");


SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

keyGen.initialize(1024, random);

KeyPair pair = keyGen.generateKeyPair();


PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();

Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");

dsa.initSign(priv);

FileInputStream fis = new FileInputStream(args[0]);


BufferedInputStream bufin = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
};
bufin.close();

byte[] realSig = dsa.sign();

FileOutputStream sigfos = new FileOutputStream("sig.txt");


sigfos.write(realSig);

sigfos.close();

byte[] key = pub.getEncoded();


FileOutputStream keyfos = new FileOutputStream("suepk.txt");
keyfos.write(key);

keyfos.close();

} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
}

};

}
VerSig.java – verifies the signature
import java.io.*;
import java.security.*;
import java.security.spec.*;

class VerSig
{

public static void main(String[] args)


{

if (args.length != 3)
{
System.out.println("Usage: VerSig publickeyfile signaturefile datafile");
}
else try
{

FileInputStream keyfis = new FileInputStream(args[0]);


byte[] encKey = new byte[keyfis.available()];
keyfis.read(encKey);

keyfis.close();

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);

KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");


PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

FileInputStream sigfis = new FileInputStream(args[1]);


byte[] sigToVerify = new byte[sigfis.available()];
sigfis.read(sigToVerify );

sigfis.close();

Signature sig = Signature.getInstance("SHA1withDSA", "SUN");


sig.initVerify(pubKey);
FileInputStream datafis = new FileInputStream(args[2]);
BufferedInputStream bufin = new BufferedInputStream(datafis);

byte[] buffer = new byte[1024];


int len;
while (bufin.available() != 0)
{
len = bufin.read(buffer);
sig.update(buffer, 0, len);
};

bufin.close();

boolean verifies = sig.verify(sigToVerify);

System.out.println("signature verifies: " + verifies);

} catch (Exception e) {
System.err.println("Caught exception " + e.toString());
};

}}
Output
Diffie–Hellman Algorithm
import java.math.BigInteger;

import java.util.Random;

class DephiHelliman {

public static BigInteger a,g,p,A,k1,b,B,k2;

public static void main(String[] args) {

// p prime number and g<p

Random myRandom = new Random(0);

p = BigInteger.probablePrime(8, myRandom);

System.out.println("Value of p:" + p);

g=new BigInteger("5");

System.out.println("Value of g:" + g);

a=new BigInteger("6");

System.out.println("Value of a:" + a);

b=new BigInteger("15");

System.out.println("Value of g:" + b);

A=g.modPow(a,p);

System.out.println("Value of A:" + A);

B=g.modPow(b,p);

System.out.println("Value of B:" + B);

k1=B.modPow(a,p);

System.out.println("Value of k1:" + k1);

k2=A.modPow(b,p);

System.out.println("Value of k2:" + k2);

}
Output
C:\Program Files\Java\jdk1.6.0_07\bin\java.exe
-classpath "C:\Program
Files\Java\jdk1.6.0_07\jre\lib\rt.jar;C:\Program
Files\Java\jdk1.6.0_07\lib\tools.jar;D:\DTU\2nd
Sem\NMS\nms_lab" DephiHelliman
Value of p:251
Value of g:5
Value of a:6
Value of g:15
Value of A:63
Value of B:149
Value of k1:149
Value of k2:149
Finished executing

Das könnte Ihnen auch gefallen