java Aes256 加密算法的实现

前端之家收集整理的这篇文章主要介绍了java Aes256 加密算法的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果希望进行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
文章由 android开发 整理发布,转载须标明出处。

猜你在找的PHP相关文章