| | |
| | | package com.panzhihua.common.model.helper; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.PBEKeySpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.security.InvalidKeyException; |
| | | import java.security.MessageDigest; |
| | | import java.security.NoSuchAlgorithmException; |
| | | import java.security.spec.KeySpec; |
| | | import java.util.Arrays; |
| | | import java.util.Base64; |
| | | |
| | | import javax.crypto.*; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.PBEKeySpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | |
| | | /** |
| | | * AES 工具类 |
| | | */ |
| | | public class AESUtil { |
| | | |
| | | private static SecretKeySpec secretKey; |
| | | private static byte[] key; |
| | | |
| | | /** |
| | | * AES 256 加密 |
| | | * @param strToEncrypt 要加密的字符串 |
| | | * @param secKey 秘钥 |
| | | * @param salt 盐 |
| | | * |
| | | * @param strToEncrypt |
| | | * 要加密的字符串 |
| | | * @param secKey |
| | | * 秘钥 |
| | | * @param salt |
| | | * 盐 |
| | | * @return 加密后的字符串 |
| | | */ |
| | | public static String encrypt256(String strToEncrypt, String secKey, String salt) { |
| | |
| | | |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec); |
| | | return Base64.getEncoder() |
| | | .encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); |
| | | return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); |
| | | } catch (Exception e) { |
| | | System.out.println("Error while encrypting: " + e.toString()); |
| | | } |
| | |
| | | |
| | | /** |
| | | * AES 256 解密 |
| | | * @param strToDecrypt 要解密的字符串 |
| | | * @param secKey 秘钥 |
| | | * @param salt 盐 |
| | | * |
| | | * @param strToDecrypt |
| | | * 要解密的字符串 |
| | | * @param secKey |
| | | * 秘钥 |
| | | * @param salt |
| | | * 盐 |
| | | * @return 解密后的字符串 |
| | | */ |
| | | public static String decrypt256( String strToDecrypt, String secKey, String salt) { |
| | | public static String decrypt256(String strToDecrypt, String secKey, String salt) { |
| | | try { |
| | | byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
| | | IvParameterSpec ivspec = new IvParameterSpec(iv); |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | private static SecretKeySpec secretKey; |
| | | private static byte[] key; |
| | | |
| | | public static void setKey(String myKey) |
| | | { |
| | | public static void setKey(String myKey) { |
| | | MessageDigest sha = null; |
| | | try { |
| | | key = myKey.getBytes("UTF-8"); |
| | | key = myKey.getBytes(StandardCharsets.UTF_8); |
| | | sha = MessageDigest.getInstance("SHA-1"); |
| | | key = sha.digest(key); |
| | | key = Arrays.copyOf(key, 16); |
| | | secretKey = new SecretKeySpec(key, "AES"); |
| | | } |
| | | catch (NoSuchAlgorithmException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | catch (UnsupportedEncodingException e) { |
| | | } catch (NoSuchAlgorithmException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * AES 128 加密 |
| | | * @param strToEncrypt 要加密的字符串 |
| | | * @param secret 秘钥 |
| | | * AES 128(base64)加密 |
| | | * |
| | | * @param strToEncrypt |
| | | * 要加密的字符串 |
| | | * @param secret |
| | | * 秘钥 |
| | | * @return 加密后的字符串 |
| | | */ |
| | | public static String encrypt128(String strToEncrypt, String secret) |
| | | { |
| | | try |
| | | { |
| | | setKey(secret); |
| | | Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey); |
| | | return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | System.out.println("Error while encrypting: " + e.toString()); |
| | | } |
| | | return null; |
| | | throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, |
| | | BadPaddingException, IllegalBlockSizeException { |
| | | setKey(secret); |
| | | Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); |
| | | cipher.init(Cipher.ENCRYPT_MODE, secretKey); |
| | | return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); |
| | | } |
| | | |
| | | /** |
| | | * AES 128 解密 |
| | | * @param strToDecrypt 要解密的字符串 |
| | | * @param secret 秘钥 |
| | | * AES 128(base64) 解密 |
| | | * |
| | | * @param strToDecrypt |
| | | * 要解密的字符串 |
| | | * @param secret |
| | | * 秘钥 |
| | | * @return 解密后的字符串 |
| | | */ |
| | | public static String decrypt128(String strToDecrypt, String secret) |
| | | { |
| | | try |
| | | { |
| | | setKey(secret); |
| | | Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey); |
| | | return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | System.out.println("Error while decrypting: " + e.toString()); |
| | | } |
| | | return null; |
| | | public static String decrypt128(String strToDecrypt, String secret) throws NoSuchPaddingException, |
| | | NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException { |
| | | setKey(secret); |
| | | Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); |
| | | cipher.init(Cipher.DECRYPT_MODE, secretKey); |
| | | return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | class AES128Example { |
| | | public static void main(String[] args) { |
| | | String[] originalString = new String[]{"51011234567892013", "13612345678", "四川省成都市高新区", "四川省成都市高新"}; |
| | | String[] originalString = new String[] {"51011234567892013", "13612345678", "四川省成都市高新区", "四川省成都市高新"}; |
| | | |
| | | String key = "5165465461dsfas"; |
| | | |
| | | Arrays.stream(originalString).forEach(os -> { |
| | | try { |
| | | String encryptedString = AESUtil.encrypt128(os, key); |
| | | String decryptedString = AESUtil.decrypt128(encryptedString, key); |
| | | |
| | | Arrays.stream(originalString).forEach(os ->{ |
| | | String encryptedString = AESUtil.encrypt128(os, key); |
| | | String decryptedString = AESUtil.decrypt128(encryptedString, key); |
| | | |
| | | System.out.println(os); |
| | | System.out.println(encryptedString); |
| | | System.out.println(decryptedString); |
| | | |
| | | |
| | | System.out.println(os); |
| | | System.out.println(encryptedString); |
| | | System.out.println(decryptedString); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | } |
| | | } |