1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| import java.math.BigInteger;
class RSA
{
public static BigInteger[] algorithmedEuclideEtendu(BigInteger a, BigInteger b)
{
BigInteger r, r1, u, u1, v, v1, rs, us, vs, q;
r = a;
r1 = b;
u = BigInteger.valueOf(1);
u1 = BigInteger.valueOf(0);
v = BigInteger.valueOf(0);
v1 = BigInteger.valueOf(1);
while(r1.intValue() != 0)
{
q = r.divide(r1);
rs = r; us = u; vs = v;
r = r1; u = u1; v = v1;
r1 = rs.subtract(q.multiply(r1));
u1 = us.subtract(q.multiply(u1));
v1 = vs.subtract(q.multiply(v1));
}
BigInteger[] returnArray = new BigInteger[3];
returnArray[0] = r;
returnArray[1] = u;
returnArray[2] = v;
return returnArray;
}
public static void main(String[] args)
{
BigInteger p, q, n, e, d, k, x;
e = new BigInteger("11");
n = new BigInteger("1760250096402811749199611608575084934851613507070884458068671022833817662936408929077786843687914521447812500504132975035459244678032179536523212946815460293715097607");
x = new BigInteger("1202788616096701030005224989473476484101298041707594228423000867741715449622721467785201153763640466006916078469019662240402174777496379716252510944035310010342328412");
p = new BigInteger("2254061458764999793801604169771561506176169383328769494484948502693543301604774269912806541179731916874542264167302030787704172610985239934635969");
q = new BigInteger("780923736377291471303");
BigInteger phi = p.subtract(BigInteger.valueOf(1)).multiply(q.subtract(BigInteger.valueOf(1)));
BigInteger[] returnArray = algorithmedEuclideEtendu(phi, e);
d = returnArray[2];
String message = null;
try
{
message = new String(x.modPow(d, n).toByteArray(), "UTF-8");
}
catch(java.io.UnsupportedEncodingException exept)
{
System.out.println(exept.getMessage());
}
System.out.println(message);
}
} |
Partager