AES 密码加密保存
来源:互联网 发布:软件开发招标书 编辑:程序博客网 时间:2024/05/21 08:40
今天做了一个用AES进行密码加密的功能(不需要jar包 jdk自带)
详细步骤如下:
1.先用main方法测试一下,能否将密码加密
package com.demo.util;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;public class MyAES { public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(password.getBytes())); 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"); kgen.init(128, new SecureRandom(password.getBytes())); 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; } /**将二进制转换成16进制 * @param buf * @return */ public static String parseByte2HexStr(byte buf[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buf.length; i++) { String hex = Integer.toHexString(buf[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } /**将16进制转换为二进制 * @param hexStr * @return */ public static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) return null; byte[] result = new byte[hexStr.length()/2]; for (int i = 0;i< hexStr.length()/2; i++) { int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16); int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16); result[i] = (byte) (high * 16 + low); } return result; } public static void main(String[] args){ String content = "123"; String password = "1234567890123"; //加密 System.out.println("加密前:" + content); byte[] encryptResult = encrypt(content, password); String encryptResultStr = parseByte2HexStr(encryptResult); System.out.println("加密后:" + encryptResultStr); //解密 byte[] decryptFrom = parseHexStr2Byte(encryptResultStr); byte[] decryptResult = decrypt(decryptFrom,password); System.out.println("解密后:" + new String(decryptResult)); }}2.创建一个配置文件(system.properties),这是一个密钥,可以自己定义
key=henglin2016
3.获取密钥:
package com.demo.util;import java.util.Iterator;import java.util.ResourceBundle;public class SystemKey { private static ResourceBundle bundle; static { bundle = ResourceBundle.getBundle("system"); if (bundle == null) { throw new IllegalArgumentException("system.properties is not found!"); } } public static String getStr(String key){ if(bundle!=null){ return bundle.getString(key); }else{ return null; } } public static void main(String[] args) { if(bundle != null) { Iterator<String> it = bundle.keySet().iterator() ; while (it.hasNext()) { System.out.println(it.next()); } } }}4.需要的都已准备好,现在只需在你需要的地方引用就可以
(1)这是登录的时候密码加密 和注册的时候密码加密,是一样的。
String AESkey=SystemKey.getStr("key"); //加密 byte[] encryptResult = MyAES.encrypt(pw, AESkey); pw = MyAES.parseByte2HexStr(encryptResult);
在数据库中密码就被加密了,如下:
0 0
- AES 密码加密保存
- Android登录记住密码,AES加密保存密码
- AES算法和base64保存密码
- 如何在java中使用Aes算法对密码加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES 加密
- AES加密
- AES 加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- linux test 命令
- 精进:如何成为一个很厉害的人
- 移动设备分辨率与原型尺寸对照表
- 常用正则表达式大全 (转)
- Mac系统VirtualBox中CentOS启用共享文件夹
- AES 密码加密保存
- 对分割区域面积等的处理
- 2017年1月11日 J2EE jsp 笔记
- makefile多级目录
- Android TV 开发-listview(GridView)使用键盘获取焦点时,选中上次失去焦点时的item,而不是就近的item
- Android微技巧之Dialog,Toast,Snackbar提醒
- OC 开始学习
- Java遍历对象属性(反射实现)
- HDU 1950 - Bridging signals(LIS)