您的位置:首页 > 编程语言 > Java开发

JAVA下AES256加密

2015-07-15 14:43 399 查看
废话不说,上代码

private String Encode(byte[] x){
String hs = "";
String stmp = "";
for (int n = 0; n < x.length; n++) {
stmp = (Integer.toHexString(x
& 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
// if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}

private byte[] Decode(String x){
String str = "0123456789ABCDEF";
int length = x.length() / 2;
char[] hexs = x.toCharArray();
byte[] d = new byte[length];
int n;
for (int i = 0; i < d.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
d[i] = (byte) (n & 0xff);
}
return d;
}

public String AES256Encrypt(String str,String key){

String rs = null;

try {
//MD5加密
MessageDigest md5;
md5 = MessageDigest.getInstance("MD5");
byte[] keybyte = md5.digest(key.getBytes("UTF8"));

//一次SHA256加密
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
keybyte = sha256.digest(keybyte);

//一次AES256加密
//Read more : http://www.ehow.com/info_12201156_java-encryption-aes-256-code.html byte[] strByte = str.getBytes("UTF8");
SecretKeySpec keys = new SecretKeySpec(keybyte, "AES");
Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
byte[] IV = new String("ABCDEF0123456789").getBytes("UTF8");
c.init(c.ENCRYPT_MODE, keys,new IvParameterSpec(IV));

byte[] result = c.doFinal(strByte);
rs = Encode(result);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}

public String AES256Decrypt(String str,String key){
String rs = null;

try {

//MD5加密
MessageDigest md5;
md5 = MessageDigest.getInstance("MD5");
byte[] keybyte = md5.digest(key.getBytes("UTF8"));

//一次SHA256加密
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
keybyte = sha256.digest(keybyte);

//一次AES256解密
//Read more : http://www.ehow.com/info_12201156_java-encryption-aes-256-code.html byte[] strByte = Decode(str);
SecretKeySpec keys = new SecretKeySpec(keybyte, "AES");
Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
byte[] IV = new String("ABCDEF0123456789").getBytes("UTF8");
c.init(c.DECRYPT_MODE, keys,new IvParameterSpec(IV));
byte[] result = c.doFinal(strByte);
rs = new String(result,"UTF8");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}


由于一个算法版权问题?AES256会报错,需要把所使用到的jre的两个文件替换掉。目录为jdk1.7.0_79\jre\lib\security下的local_policy.jar和US_export_policy.jar,这两个文件官网上有可以下载,但是我也忘记在哪里了蛤蛤蛤。

完成这个之后还会报错。那就需要添加另外一个jar包bcprov-jdk15on-152.jar(其实这里还有个扩展包bcprov-ext-jdk15on-152.jar,但是我不知道需不需要两个包都放进去才能生效),放在目录jdk1.7.0_79\jre\lib\ext下,另外在jdk1.7.0_79\jre\lib\security\java.security 添加一句

security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvide

数字按顺序加入,应该就没问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: