import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; /** * Created with IntelliJ IDEA. * Description:1、对明文密码进行加密验证 * 2、AES ECB模式+BASE64加密方式 * */ public class AesBase64Utils { private static final String AES_KEY = "123asdadawwad1yhgfdfesdcswerthyyuhsaAXCSESXCVFGD"; // 加密 public static String Encrypt(String sSrc) throws Exception { byte[] bytes = getSecretKeySpecByte(AES_KEY); SecretKeySpec skeySpec =new SecretKeySpec(bytes,"AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式" cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); String encryStr = new String(new Base64().encode(encrypted)); return encryStr;//此处使用BASE64做转码功能,同时能起到2次加密的作用。 } // 解密 public static String Decrypt(String sSrc) { try { byte[] bytes = getSecretKeySpecByte(AES_KEY); SecretKeySpec skeySpec =new SecretKeySpec(bytes,"AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] encrypted1 = (byte[])new Base64().decode(sSrc);//先用base64解密 byte[] original = cipher.doFinal(encrypted1); String originalString = new String(original,"utf-8"); return originalString; } catch (Exception ex) { return null; } } /** * 如果sKey长度小于等于16,则补零; *如果sKey长度大于16,则超过16的部分字节,返回去与原来的字节进行异或操作。 * @param sKey * @return */ private static byte[] getSecretKeySpecByte(String sKey){ byte[] bytes = new byte[16]; byte[] keyBytes = sKey.getBytes(); for (int i = 0; i < sKey.length(); i++) { bytes[i % 16] = (byte) (bytes[i % 16] ^ keyBytes[i]); } return bytes; } public static void main(String[] args) { try { String encryptPw = AesBase64Utils.Encrypt("123645"); System.out.println("加密数据========"+encryptPw); String decryptPw = AesBase64Utils.Decrypt(encryptPw); System.out.println("解密数据========"+decryptPw); } catch (Exception e) { e.printStackTrace(); } } }