报错日志:
Exception in thread "main" java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/ECB/PKCS7Padding
相关软件已经存在百度云盘的soft AES相关文件夹下,正常前两步就能成功。
解决方案:
1、下载bcprov-jdk16-1.46.jar 拷贝到以下目录:
C:\Program Files\Java\jdk1.8.0_20\jre\lib\ext
2、修改C:\Program Files\Java\jdk1.8.0_20\jre\lib\security 下的java.security
将74行修改为:
security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
3、如果还不成功请参考:非必要不要操作第三步
https://www.codeprj.com/blog/92cdc41.html
替换C:\Program Files\Java\jre1.8.0_261\lib\security\policy 下面的 local_policy.jar和US_export_policy.jar
下载请参考:
https://download.csdn.net/download/mrlin6688/16828133
AES工具类代码:
package cn.com.elite;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Security;
public class AESUtil {
//加密
//AES加密字符串
private static final String ENCODE = "UTF-8";
private static final String FORMAT = "AES";
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS7Padding";
public static String encryption(String content, String secretKey){
if(secretKey == null) {
return null;
}
if(secretKey.length() != 16) {
return null;
}
try{
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
byte[] raw = secretKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));
String hexString =Hex.encodeHexString(encrypted);
return hexString;
} catch (Exception e) {
System.out.println("解密异常 ");
e.printStackTrace();
}
return null;
}
/**
* 解密
*/
public static String decode(String str, String skey){
try {
if (str == null) {
return null;
}
byte[] data = Hex.decodeHex(str.toCharArray());
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
SecretKeySpec secretKeySpec = new SecretKeySpec(skey.getBytes(ENCODE), FORMAT);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return new String(cipher.doFinal(data), ENCODE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
String key = "HRBBBANKIMAESKEY";
String encryptStr = encryption("PB103419608", key);
System.out.println("aec:"+encryptStr);
String content1 = decode(encryptStr, key);
System.out.println("dec:"+content1);
}
}