1 package com.quadcap.crypto; 2 3 40 41 import java.util.Random ; 42 43 48 public class KeyFactory { 49 53 public static SymmetricKey createSymmetricKey(Random r) { 54 SymmetricKey k = new Tea(); 55 k.init(r); 56 return k; 57 } 58 59 63 public static SymmetricKey createSymmetricKey(String passphrase) { 64 return createSymmetricKey("aes:128", passphrase); 65 } 66 67 70 public static byte[] bytesFromPassphrase(int len, String passphrase) { 71 byte[] key = new byte[len]; 72 long seed = 13 * passphrase.length(); 73 for (int i = 0; i < key.length; i++) { 74 int c = passphrase.charAt(i % passphrase.length()); 75 seed += (c << 18) ^ c; 76 seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); 77 key[i] = (byte)((seed >> 5) & 0xff); 78 } 79 return key; 80 } 81 82 87 public static SymmetricKey createSymmetricKey(String algo, 88 String passphrase) { 89 SymmetricKey k = null; 90 91 algo = algo.toLowerCase(); 92 if (algo.startsWith("aes")) { 93 int len = 16; 94 int idx = algo.indexOf(':'); 95 if (idx > 0) { 96 len = Integer.parseInt(algo.substring(idx+1)) / 8; 97 } 98 Rijndael rk = new Rijndael(); 99 rk.init(bytesFromPassphrase(len, passphrase)); 100 k = rk; 101 } else if (algo.startsWith("tea:256")) { 102 Tea256 tk = new Tea256(); 103 tk.init(bytesFromPassphrase(256, passphrase)); 104 k = tk; 105 } else if (algo.startsWith("tea:128")) { 106 Tea tk = new Tea(); 107 tk.init(bytesFromPassphrase(128, passphrase)); 108 k = tk; 109 } 110 return k; 111 } 112 113 116 public static PrivateKey createPrivateKey(Random r, String alg, 117 String name) { 118 RSAPrivateKey k = new RSAPrivateKey(); 119 k.init(name, 1024, r); 120 return k; 121 } 122 123 126 public static SymmetricKey readSymmetricKey(String s) { 127 Tea t = new Tea(); 128 t.init(s); 129 return t; 130 } 131 132 135 public static PublicKey readPublicKey(String s) { 136 RSAPublicKey k = new RSAPublicKey(); 137 k.init(s); 138 return k; 139 } 140 141 144 public static PrivateKey readPrivateKey(String s) { 145 RSAPrivateKey k = new RSAPrivateKey(); 146 k.init(s); 147 return k; 148 } 149 150 153 public static Digest createDigest(String alg) { 154 return new SHA1Digest(); 155 } 156 157 public static Random createRandom(String seed) { 158 Random r = new java.util.Random (); 159 r.setSeed(System.currentTimeMillis() * 1003 + seed.hashCode()); 160 return r; 161 } 162 163 } 164
| Popular Tags
|