Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
27
Task/RSA-code/Java/rsa-code-1.java
Normal file
27
Task/RSA-code/Java/rsa-code-1.java
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
public static void main(String[] args) {
|
||||
/*
|
||||
This is probably not the best method...or even the most optimized way...however it works since n and d are too big to be ints or longs
|
||||
This was also only tested with 'Rosetta Code' and 'Hello World'
|
||||
It's also pretty limited on plainText size (anything bigger than the above will fail)
|
||||
*/
|
||||
BigInteger n = new BigInteger("9516311845790656153499716760847001433441357");
|
||||
BigInteger e = new BigInteger("65537");
|
||||
BigInteger d = new BigInteger("5617843187844953170308463622230283376298685");
|
||||
Charset c = Charsets.UTF_8;
|
||||
String plainText = "Rosetta Code";
|
||||
System.out.println("PlainText : " + plainText);
|
||||
byte[] bytes = plainText.getBytes();
|
||||
BigInteger plainNum = new BigInteger(bytes);
|
||||
System.out.println("As number : " + plainNum);
|
||||
BigInteger Bytes = new BigInteger(bytes);
|
||||
if (Bytes.compareTo(n) == 1) {
|
||||
System.out.println("Plaintext is too long");
|
||||
return;
|
||||
}
|
||||
BigInteger enc = plainNum.modPow(e, n);
|
||||
System.out.println("Encoded: " + enc);
|
||||
BigInteger dec = enc.modPow(d, n);
|
||||
System.out.println("Decoded: " + dec);
|
||||
String decText = new String(dec.toByteArray(), c);
|
||||
System.out.println("As text: " + decText);
|
||||
}
|
||||
36
Task/RSA-code/Java/rsa-code-2.java
Normal file
36
Task/RSA-code/Java/rsa-code-2.java
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import java.math.BigInteger;
|
||||
import java.util.Random;
|
||||
|
||||
public class rsaCode {
|
||||
public static void main(String[]args){
|
||||
//Size of primes
|
||||
int BIT_LENGTH = 4096;
|
||||
Random rand = new Random();
|
||||
//Generate primes and other necessary values
|
||||
BigInteger p = BigInteger.probablePrime(BIT_LENGTH / 2, rand);
|
||||
BigInteger q = BigInteger.probablePrime(BIT_LENGTH / 2, rand);
|
||||
BigInteger n = p.multiply(q);
|
||||
BigInteger phi = p.subtract(BigInteger.valueOf(1)).multiply(q.subtract(BigInteger.valueOf(1)));
|
||||
BigInteger e;
|
||||
BigInteger d;
|
||||
do {
|
||||
e = new BigInteger(phi.bitLength(), rand);
|
||||
} while (e.compareTo(BigInteger.valueOf(1)) <= 0 || e.compareTo(phi) >= 0 || !e.gcd(phi).equals(BigInteger.valueOf(1)));
|
||||
d = e.modInverse(phi);
|
||||
//Convert message to byte array and then to a BigInteger
|
||||
BigInteger message = new BigInteger("Hello World! - From Rosetta Code".getBytes());
|
||||
BigInteger cipherText = message.modPow(e, n);
|
||||
BigInteger decryptedText = cipherText.modPow(d, n);
|
||||
System.out.println("Message: " + message);
|
||||
System.out.println("Prime 1: " + p);
|
||||
System.out.println("Prime 2: " + q);
|
||||
System.out.println("Phi p1 * p2: " + phi);
|
||||
System.out.println("p1 * p2: " + n);
|
||||
System.out.println("Public key: " + e);
|
||||
System.out.println("Private key: " + d);
|
||||
System.out.println("Ciphertext: " + cipherText);
|
||||
System.out.println("Decrypted message(number form): " + decryptedText);
|
||||
//Convert BigInteger to byte array then to String
|
||||
System.out.println("Decrypted message(string): " + new String(decryptedText.toByteArray()));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue