New file |
| | |
| | | package com.hdl.sdk.link.core.utils; |
| | | |
| | | |
| | | import android.text.TextUtils; |
| | | |
| | | import com.hdl.sdk.link.common.utils.LogUtils; |
| | | |
| | | import java.security.InvalidAlgorithmParameterException; |
| | | import java.security.InvalidKeyException; |
| | | import java.security.Key; |
| | | import java.security.NoSuchAlgorithmException; |
| | | import javax.crypto.BadPaddingException; |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.IllegalBlockSizeException; |
| | | import javax.crypto.NoSuchPaddingException; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | |
| | | /** |
| | | * Aes 加解密工具类 |
| | | * |
| | | * @author yangtao |
| | | * 2020年10月29日 |
| | | */ |
| | | public class AesUtil { |
| | | |
| | | private static final String CIPHER_INSTANCE = "AES/CBC/PKCS7Padding"; |
| | | private static final String AES_ALGORITHM = "AES"; |
| | | |
| | | // static { |
| | | // //AES/CBC/PKCS7Padding 依赖 |
| | | // Security.addProvider(new BouncyCastleProvider()); |
| | | // } |
| | | |
| | | /** |
| | | * AES加密 |
| | | * |
| | | * @param key |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static byte[] aesEncrypt(byte[] content, String key) { |
| | | return encrypt(content, key.getBytes(), CIPHER_INSTANCE, true, null); |
| | | } |
| | | |
| | | /** |
| | | * AES解密 |
| | | * |
| | | * @param key |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static byte[] aesDecrypt(byte[] content, String key) { |
| | | if (content == null || TextUtils.isEmpty(key)) { |
| | | LogUtils.i("数据解密:","content:"+content+" key:"+key); |
| | | return null; |
| | | } |
| | | return decrypt(content, key.getBytes(), CIPHER_INSTANCE, true, null); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加密 |
| | | * |
| | | * @param content 待加密字符串 |
| | | * @param keyByte aesKye的hexStr |
| | | * @param cipherInstance AES算法填充方式 |
| | | * @param isIv 是否使用偏移量 ECB模式不可用 |
| | | * @param iv 偏移量 不传默认密钥 |
| | | * @return |
| | | */ |
| | | public static byte[] encrypt(byte[] content, byte[] keyByte, String cipherInstance, Boolean isIv, byte[] iv) { |
| | | try { |
| | | //KEY转换 |
| | | Key key = new SecretKeySpec(keyByte, AES_ALGORITHM); |
| | | //加密 |
| | | Cipher cipher = Cipher.getInstance(cipherInstance); |
| | | if (isIv != null && isIv) { |
| | | //偏移量 不传默认密钥 |
| | | if (iv == null) { |
| | | iv = keyByte; |
| | | } |
| | | IvParameterSpec ivps = new IvParameterSpec(iv); |
| | | cipher.init(Cipher.ENCRYPT_MODE, key, ivps); |
| | | } else { |
| | | cipher.init(Cipher.ENCRYPT_MODE, key); |
| | | } |
| | | byte[] result = cipher.doFinal(content); |
| | | return result; |
| | | } catch (NoSuchAlgorithmException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (InvalidKeyException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (NoSuchPaddingException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (BadPaddingException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (IllegalBlockSizeException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (InvalidAlgorithmParameterException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 解密 |
| | | * |
| | | * @param contentByte 待解密待字符串hexStr |
| | | * @param contentByte 密钥 |
| | | * @param cipherInstance AES算法填充方式 |
| | | * @param isIv 是否使用偏移量 ECB模式不可用 |
| | | * @param iv 偏移量 不传默认密钥 |
| | | * @return |
| | | */ |
| | | public static byte[] decrypt(byte[] contentByte, byte[] keyByte, String cipherInstance, Boolean isIv, byte[] iv) { |
| | | try { |
| | | //KEY转换 |
| | | Key key = new SecretKeySpec(keyByte, AES_ALGORITHM); |
| | | //解密 |
| | | Cipher cipher = Cipher.getInstance(cipherInstance); |
| | | if (isIv != null && isIv) { |
| | | //偏移量 不传默认密钥 |
| | | if (iv == null) { |
| | | iv = keyByte; |
| | | } |
| | | IvParameterSpec ivps = new IvParameterSpec(iv); |
| | | cipher.init(Cipher.DECRYPT_MODE, key, ivps); |
| | | } else { |
| | | cipher.init(Cipher.DECRYPT_MODE, key); |
| | | } |
| | | byte[] result = cipher.doFinal(contentByte); |
| | | return result; |
| | | } catch (NoSuchAlgorithmException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (InvalidKeyException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (NoSuchPaddingException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (BadPaddingException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (IllegalBlockSizeException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } catch (InvalidAlgorithmParameterException e) { |
| | | LogUtils.e(e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |