1. package devdiv.demo; 
  2.  
  3. import java.security.SecureRandom; 
  4.  
  5. import javax.crypto.Cipher; 
  6. import javax.crypto.KeyGenerator; 
  7. import javax.crypto.SecretKey; 
  8. import javax.crypto.spec.SecretKeySpec; 
  9.  
  10. /** 
  11. * Usage: 
  12. * <pre> 
  13. * String crypto = SimpleCrypto.encrypt(masterpassword, cleartext) 
  14. * ... 
  15. * String cleartext = SimpleCrypto.decrypt(masterpassword, crypto) 
  16. * </pre> 
  17. * @author ferenc.hechler 
  18. */ 
  19. public class SimpleCrypto { 
  20.  
  21. public static String encrypt(String seed, String cleartext) throws Exception { 
  22. byte[] rawKey = getRawKey(seed.getBytes()); 
  23. byte[] result = encrypt(rawKey, cleartext.getBytes()); 
  24. return toHex(result); 
  25.  
  26. public static String decrypt(String seed, String encrypted) throws Exception { 
  27. byte[] rawKey = getRawKey(seed.getBytes()); 
  28. byte[] enc = toByte(encrypted); 
  29. byte[] result = decrypt(rawKey, enc); 
  30. return new String(result); 
  31.  
  32. private static byte[] getRawKey(byte[] seed) throws Exception { 
  33. KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
  34. SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 
  35. sr.setSeed(seed); 
  36. kgen.init(128, sr); // 192 and 256 bits may not be available 
  37. SecretKey skey = kgen.generateKey(); 
  38. byte[] raw = skey.getEncoded(); 
  39. return raw; 
  40.  
  41.  
  42. private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { 
  43. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
  44. Cipher cipher = Cipher.getInstance("AES"); 
  45. cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
  46. byte[] encrypted = cipher.doFinal(clear); 
  47. return encrypted; 
  48.  
  49. private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { 
  50. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
  51. Cipher cipher = Cipher.getInstance("AES"); 
  52. cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
  53. byte[] decrypted = cipher.doFinal(encrypted); 
  54. return decrypted; 
  55.  
  56. public static String toHex(String txt) { 
  57. return toHex(txt.getBytes()); 
  58. public static String fromHex(String hex) { 
  59. return new String(toByte(hex)); 
  60.  
  61. public static byte[] toByte(String hexString) { 
  62. int len = hexString.length()/2; 
  63. byte[] result = new byte[len]; 
  64. for (int i = 0; i < len; i++) 
  65. result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue(); 
  66. return result; 
  67.  
  68. public static String toHex(byte[] buf) { 
  69. if (buf == null) 
  70. return ""; 
  71. StringBuffer result = new StringBuffer(2*buf.length); 
  72. for (int i = 0; i < buf.length; i++) { 
  73. appendHex(result, buf[i]); 
  74. return result.toString(); 
  75. private final static String HEX = "0123456789ABCDEF"; 
  76. private static void appendHex(StringBuffer sb, byte b) { 
  77. sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f)); 
  78.  
  79. }
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()