AES加解密实例
package com.bijian.study; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.axis.encoding.Base64; public class AESTools { private static String password = "好复杂的密码complex password,没见过这么奇怪的密码"; /** * 获取密码 */ public static String getPassword() { return password; } /** * 加密 * @param content * @param password * @return */ public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(getKeyByStr(password)); kgen.init(128, random); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 byte[] byteContent = content.getBytes("UTF-8"); cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(byteContent); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } /** * 解密 * @param content * @param password * @return */ public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(getKeyByStr(password)); kgen.init(128, random); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 cipher.init(Cipher.DECRYPT_MODE, key);// 初始化 byte[] result = cipher.doFinal(content); return result; // 加密 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null; } public static byte[] getKeyByStr(String str) { byte[] bRet = new byte[str.length() / 2]; for (int i = 0; i < str.length() / 2; i++) { Integer itg = new Integer(16 * getChrInt(str.charAt(2 * i)) + getChrInt(str.charAt(2 * i + 1))); bRet[i] = itg.byteValue(); } return bRet; } public static int getChrInt(char chr) { int iRet = 0; if (chr == "0".charAt(0)) iRet = 0; if (chr == "1".charAt(0)) iRet = 1; if (chr == "2".charAt(0)) iRet = 2; if (chr == "3".charAt(0)) iRet = 3; if (chr == "4".charAt(0)) iRet = 4; if (chr == "5".charAt(0)) iRet = 5; if (chr == "6".charAt(0)) iRet = 6; if (chr == "7".charAt(0)) iRet = 7; if (chr == "8".charAt(0)) iRet = 8; if (chr == "9".charAt(0)) iRet = 9; if (chr == "A".charAt(0)) iRet = 10; if (chr == "B".charAt(0)) iRet = 11; if (chr == "C".charAt(0)) iRet = 12; if (chr == "D".charAt(0)) iRet = 13; if (chr == "E".charAt(0)) iRet = 14; if (chr == "F".charAt(0)) iRet = 15; return iRet; } public static String decryptString(String contents) { return new String(decrypt(Base64.decode(contents), password)); } public static String encryptString(String contents) { return Base64.encode(encrypt(contents, password)); } public static void main(String[] args) { String text = "深圳欢迎您!Welcome to shenzhen!"; //加密 String encryptStr = AESTools.encryptString(text); System.out.println("text length:" + text.length() + ",text:" + text); System.out.println("encryptStr length:" + encryptStr.length() + ",encryptStr" + encryptStr); System.out.println("密文比明文增加长度add length:" + (encryptStr.length() - text.length())); //解密 String decryptStr = AESTools.decryptString(encryptStr); System.out.println("decryptStr length:" + decryptStr.length() + ",decryptStr:" + decryptStr); } }
运行结果:
text length:26,text:深圳欢迎您!Welcome to shenzhen! encryptStr length:64,encryptStrujOEp9losb7mJx8a8Ht2nbCNaVtfCrAuKt9JRjTGdULpPYJOUr0nvzYQ9rvqWB6z 密文比明文增加长度add length:38 decryptStr length:26,decryptStr:深圳欢迎您!Welcome to shenzhen!
相关推荐
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果...
AES加解密前后端实例
pb11.5 + pbni + openssl实现RSA\SM2\AES加密解密,平时用不到这些,做民营医疗机构监管平台对接,AK/SK接口认证,需要用到RSA\AES才做,分享出来,希望能对有需要的人有点帮助。
PB下的加密解密的简单算法 原理上对原字符串的每个字符做了数值转换,在加上加密因子,经过颠倒错位后再形成加密后数值,解密时再颠倒转换回来。 比较简单,现在用于对安全性要求不高的应用里。 原来发了一份,资源...
今天小编就为大家分享一篇nodejs aes 加解密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了java使用Hex编码解码实现Aes加密解密功能,结合完整实例形式分析了Aes加密解密功能的定义与使用方法,需要的朋友可以参考下
本篇文章主要介绍了android使用AES加密和解密文件实例代码,非常具有实用价值,需要的朋友可以参考下
aes加密解密实例(注:该加密模式为ECB模式,ZeroPadding填充)
java代码实例 AES加密解密 Base64加密解密
有界面的AES算法加解密完整代码实例,剖析下会有较大帮助的
Hash MD5 DES AES RSA加解密实例
包括java自定义加密解密实例,异或加密解密实例,AES加密解密,DES加密解密 对文件加密建议使用DES方式 技术学习交流:635278789
AES加密和解密源码,Delphi源码实例``
AES 加密 解密 128位 java C# JAVASCRIPT PHP 实例
java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...
JavaScript应用实例-AES加解密demo.js
JavaScript应用实例-aes加解密000.js
JavaScript应用实例-在线AES加密解密.js