java Aes256 加密算法的实现
发布时间:2020-12-13 20:11:35 所属栏目:PHP教程 来源:网络整理
导读:如果希望进行AES256位的加密解密,需要事前从java官网下载 local_policy.jar与US_export_policy.jar替换%JAVA_HOME%/jre/lib/security的两个policy文件,local_policy.jar与US_export_policy.jar。 主要是为了突破AES算法只能支持到128位的限制。如果未替换
如果希望进行AES256位的加密解密,需要事前从java官网下载 local_policy.jar与US_export_policy.jar替换%JAVA_HOME%/jre/lib/security的两个policy文件,local_policy.jar与US_export_policy .jar。 主要是为了突破AES算法只能支持到128位的限制。如果未替换,可能会得到以下毛病: *
java.security.InvalidKeyException: Illegal key
package com.jlins;
import java.io.UnsupportedEncodingException;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.jlins.util.Hex;
/**
* java Aes256 加密
*
* @author jlins
*
*/
public class Aes256Encryptor {
// 说明 key 需要大家自己去设定加密解密的key,key牵涉到安全信息,所以这里没法公布
private static final byte[] key = {};
private static final String transform = "AES/CBC/NoPadding";
private static final String algorithm = "AES";
private static final SecretKeySpec keySpec = new SecretKeySpec(key,algorithm);
public static void main(String[] args) throws Exception {
String pwds[] = { "123","0123456789012345","01234567890123456","123","0123456789012345678","012345678901234567890123456789","b","012345678901234567" };
String ivss[] = { "test","test","test0123456789012","test01234567890123","a","test" };
String rr[] = new String[ivss.length];
for (int i = 0; i < ivss.length; i++) {
String en = encrypt(pwds[i],ivss[i]);
String decy = decrypt(en,ivss[i]);
rr[i] = "[" + ivss[i] + "],[" + decy + "]-->[" + en + "]";
System.out.println(rr[i]);
}
System.out.println("---------");
for (int i = 0; i < rr.length; i++) {
System.out.println(rr[i]);
}
}
/**
*/
public static String decrypt(String pHexText,String pIv) throws Exception {
Cipher cipher = Cipher.getInstance(transform);
byte[] encryptedBytes = Hex.decode(pHexText);
byte[] iv = createIV(pIv);
cipher.init(Cipher.DECRYPT_MODE,keySpec,new IvParameterSpec(iv));
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
System.arraycopy(decryptedBytes,encryptedBytes,encryptedBytes.length);
String result = new String(encryptedBytes);
return result.trim();
}
/**
*/
public static String encrypt(String pData,String pIv) throws Exception {
Cipher cipher = Cipher.getInstance(transform);
byte[] iv = createIV(pIv);
cipher.init(Cipher.ENCRYPT_MODE,new IvParameterSpec(iv));
byte[] output = cipher.doFinal(paddingData(pData));
byte[] encryptedContent = new byte[output.length];
System.arraycopy(output,encryptedContent,encryptedContent.length);
String result = new String(Hex.encode(encryptedContent)).toUpperCase();
return result;
}
/**
* 补齐的16位的整数倍
*
* @param pData
* @return
*/
private static byte[] paddingData(String pData) {
byte[] bytes = pData.getBytes();
int length = bytes.length / 16;
if (length * 16 < bytes.length) {
length++;
}
byte[] result = new byte[length * 16];
System.arraycopy(bytes,result,bytes.length);
for (int i = bytes.length; i < result.length; i++) {
result[i] = 0x00;
}
return result;
}
/**
* 初始化向量到16位
* */
private static byte[] createIV(String pIv) throws UnsupportedEncodingException {
byte[] bytes = pIv.getBytes("US-ASCII");
int length = bytes.length / 16;
if (length * 16 < bytes.length) {
length++;
}
byte[] result = new byte[16];
System.arraycopy(bytes,bytes.length > 16 ? 16 : bytes.length);
for (int i = bytes.length; i < result.length; i++) {
result[i] = 0x00;
}
return result;
}
} 原文地址:http://www.itmmd.com/201411/98.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |