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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| package com.touchsmail.util;
import org.springframework.beans.factory.FactoryBean;
import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import java.math.BigInteger; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException;
public class EncryptDBPasswordFactory implements FactoryBean<String> {
private String password;
private String encode(String secret, String privateKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { byte[] kbytes = privateKey.getBytes(); SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encoding = cipher.doFinal(secret.getBytes()); BigInteger n = new BigInteger(encoding); return n.toString(16); }
private char[] decode(String secret) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { byte[] kbytes = "这里是盐".getBytes(); SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
BigInteger n = new BigInteger(secret, 16); byte[] encoding = n.toByteArray();
Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decode = cipher.doFinal(encoding); return new String(decode).toCharArray(); }
@Override public String getObject() throws Exception { if (password != null) { return String.valueOf(decode(password)); } else { return null; } }
@Override public Class<String> getObjectType() { return String.class; }
@Override public boolean isSingleton() { return true; }
public void setPassword(String password) { this.password = password; }
public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException {
EncryptDBPasswordFactory encrypt = new EncryptDBPasswordFactory();
String secret = ""; String secText = encrypt.encode(secret, ""); System.out.println(secText);
System.out.println(encrypt.decode(secText)); }
public static String decodeA(String secret) throws InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException { EncryptDBPasswordFactory encrypt = new EncryptDBPasswordFactory(); return new String(encrypt.decode(secret)); }
}
|