Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.31 KB | None | 0 0
  1. import java.security.InvalidAlgorithmParameterException;
  2. import java.security.KeyPair;
  3. import java.security.KeyPairGenerator;
  4. import java.security.MessageDigest;
  5. import java.security.NoSuchAlgorithmException;
  6. import java.security.SecureRandom;
  7. import java.security.spec.RSAKeyGenParameterSpec;
  8.  
  9. import static java.lang.String.format;
  10.  
  11. public class Main {
  12.   private static int KEY_SIZE = 2048;
  13.  
  14.   public static void main(String[] args) throws Exception {
  15.     genKey1();
  16.     genKey2();
  17.   }
  18.  
  19.   public static void genKey1() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
  20.     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
  21.     RSAKeyGenParameterSpec params = new RSAKeyGenParameterSpec(KEY_SIZE, RSAKeyGenParameterSpec.F4);
  22.     keyGen.initialize(params, new FakeRandom());
  23.     KeyPair keyPair = keyGen.generateKeyPair();
  24.     print(keyPair);
  25.   }
  26.  
  27.   public static void genKey2() throws NoSuchAlgorithmException {
  28.     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
  29.     keyGen.initialize(KEY_SIZE, new FakeRandom());
  30.     KeyPair keyPair = keyGen.generateKeyPair();
  31.     print(keyPair);
  32.   }
  33.  
  34.   public static void print(KeyPair key) throws NoSuchAlgorithmException {
  35.     MessageDigest prng = MessageDigest.getInstance("SHA-256");
  36.     byte[] pub = prng.digest(key.getPublic().getEncoded());
  37.     for (int i = 0; i < pub.length; i++) {
  38.       System.out.print(format("%02x", pub[i]));
  39.     }
  40.     System.out.println();
  41.   }
  42.  
  43.   public static class FakeRandom extends SecureRandom {
  44.     private byte[] state;
  45.     private int counter;
  46.  
  47.     public FakeRandom() {
  48.       state = new byte[32];
  49.       for (byte i=0; i<32; i++) {
  50.         state[i] = i;
  51.       }
  52.     }
  53.  
  54.     @Override
  55.     public void nextBytes(byte[] bytes) {
  56.       System.err.println(format("in FakeRandom: %d %d", bytes.length, counter++));
  57.       try {
  58.         int offset = 0;
  59.         while (true) {
  60.           MessageDigest prng = MessageDigest.getInstance("SHA-256");
  61.           state = prng.digest(state);
  62.           for (int i = 0; i < state.length; i++) {
  63.             if (offset == bytes.length) {
  64.               return;
  65.             }
  66.             bytes[offset++] = state[i];
  67.           }
  68.         }
  69.       } catch (NoSuchAlgorithmException e) {
  70.         throw new RuntimeException(e);
  71.       }
  72.     }
  73.   }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement