AES加密
来源:互联网 发布:carousel.js 使用手册 编辑:程序博客网 时间:2024/06/10 20:12
AES加密此处用于对本地数据进行一些加密操作,保证数据的安全。该加密是对称加密类型,即加密的密钥和解密的密钥是一样的,这样加密处理后不会让黑客在手机上直接获取到用户的账号密码,而且AES加密每次生成的加密后的内容是不一样的,这样更安全。考虑到怕我们给出的加密串被反编译获取,这里可以获取本手机的imei号截取一部分来加密密码,这样基本杜绝了在手机上被人盗去密码的情况。
这里找到并稍加修改了一下负责加密解密的一个类,并做了相关的测试,确实可用,这里将该类粘贴到下面,用的话以后随时可以取。
package com.example.esatest;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class AESEncryptor { /** * AES加密 */ public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] result = encrypt(rawKey, cleartext.getBytes()); System.out.println("加密============="+result); return toHex(result); } /** * AES解密 */ public static String decrypt(String seed, String encrypted) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] getRawKey(byte[] seed) throws Exception { String Algorithm = "AES"; // 加密算法 KeyGenerator kgen = KeyGenerator.getInstance(Algorithm);//生成秘要 //或用做"IBMSecureRandom",提供强加密随机数生成器 SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); // 重新设置此随机对象的种子。 sr.setSeed(seed); //设置加密模式 kgen.init(128, sr); // 192 and 256 bits may not be available SecretKey skey = kgen.generateKey();//生成secret key byte[] raw = skey.getEncoded();//加密完成 return raw; } //真正执行加密 private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { //生成 密钥 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); //实例化(为加密和解密提供密码功能) Cipher cipher = Cipher.getInstance("AES"); //设置加密模式 cipher.init(Cipher.ENCRYPT_MODE, skeySpec); //执行加密 byte[] encrypted = cipher.doFinal(clear); return encrypted; } //真正执行解密 private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); //设置解密模式 cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public static String toHex(String txt) { return toHex(txt.getBytes()); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length() / 2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); return result; } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2 * buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } private final static String HEX = "0123456789ABCDEF"; private static void appendHex(StringBuffer sb, byte b) { sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f)); }}
阅读全文
0 0
- AES加密
- AES加密
- AES加密
- AES加密
- AES 加密
- AES加密
- AES 加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES加密
- AES 加密
- 如何实施异构服务器的负载均衡及过载保护?
- Tornado官方文档(五)【tornado web应用框架】
- 调整数组使奇数全部位于偶数前面
- Wasserstein GAN
- 20171030
- AES加密
- Predix应用图标设计准则简介
- Git对库文件权限的管理与filemode配置详解
- Linux和windows互传文件、用户配置文件和密码配置文件、用户组管理与用户管理
- Mysql 千万以上数据优化方法(一,SQL优化)
- 第二章 SQL命令参考-INSERT
- 20171030
- thrift学习
- .o/.obj 文件的组成格式