android加密aes
来源:互联网 发布:nba球员场均数据排名 编辑:程序博客网 时间:2024/06/15 12:05
这是一个AES的加密和解密的工具类
import android.util.Base64;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;/** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化; */public class AESUtil { /* * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。 */ private String sKey = "HrbyzkjForGzcxy8";//key,可自行修改 private String ivParameter = "1298458753216582";//偏移量,可自行修改 private static AESUtil instance = null; private AESUtil() { } public static AESUtil getInstance() { if (instance == null) instance = new AESUtil(); return instance; } // 加密 public String encrypt(String clearText) { byte[] encrypted = null; try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); byte[] rawKey = sKey.getBytes();// byte[] rawKey = getRawKey(sKey.getBytes()); SecretKeySpec keySpec = new SecretKeySpec(rawKey, "AES"); IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); encrypted = cipher.doFinal(clearText.getBytes("utf-8")); } catch (Exception e) { e.printStackTrace(); } return Base64.encodeToString(encrypted, Base64.DEFAULT);// 此处使用BASE64做转码。 } public static String encrypt(String clearText, String secretKey, String vector) { byte[] encrypted = null; try { if (secretKey == null) { return null; } if (secretKey.length() != 16) { return null; } Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); byte[] raw = secretKey.getBytes(); SecretKeySpec keySpec = new SecretKeySpec(raw, "AES"); IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度 cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); encrypted = cipher.doFinal(clearText.getBytes("utf-8")); } catch (Exception e) { e.printStackTrace(); } return Base64.encodeToString(encrypted, Base64.DEFAULT);// 此处使用BASE64做转码。 } // 解密 public String decrypt(String cipherText) { try { byte[] raw = sKey.getBytes("ASCII"); SecretKeySpec keySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keySpec, iv); byte[] encrypted1 = Base64.decode(cipherText, Base64.DEFAULT);// 先用base64解密 byte[] original = cipher.doFinal(encrypted1); return new String(original, "utf-8"); } catch (Exception ex) { return null; } } public String decrypt(String cipherText, String key, String ivs) { try { byte[] raw = key.getBytes("ASCII"); SecretKeySpec keySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv = new IvParameterSpec(ivs.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keySpec, iv); byte[] encrypted1 = Base64.decode(cipherText, Base64.DEFAULT);// 先用base64解密 byte[] original = cipher.doFinal(encrypted1); return new String(original, "utf-8"); } catch (Exception ex) { return null; } } public static String encodeBytes(byte[] bytes) { StringBuilder strBuf = new StringBuilder(); for (byte aByte : bytes) { strBuf.append((char) (((aByte >> 4) & 0xF) + ((int) 'a'))); strBuf.append((char) (((aByte) & 0xF) + ((int) 'a'))); } return strBuf.toString(); } /** * 生成密钥 * * @param seed 种子 * @return 密钥 * @throws Exception */ private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator keygen = KeyGenerator.getInstance("AES"); //for android SecureRandom sr; // 在4.2以上版本中,SecureRandom获取方式发生了改变 if (android.os.Build.VERSION.SDK_INT >= 17) { sr = SecureRandom.getInstance("SHA1PRNG", "Crypto"); } else { sr = SecureRandom.getInstance("SHA1PRNG"); } sr.setSeed(seed); keygen.init(128, sr); SecretKey sKey = keygen.generateKey(); return sKey.getEncoded(); }}
1 0
- Android AES加密
- Android AES加密实现
- AES Android 加密
- 7、Android AES加密
- Android之AES加密
- android AES加密
- Android AES 加密,解密
- ios android aes 加密
- android AES加密 --java
- android AES加密
- Android中的AES加密
- Android AES加密解密
- Android AES加密解密
- android AES加密代码
- android AES加密
- Android AES加密解密
- Android AES 加密
- Android AES加密 解密
- d3d11 鼠标拾取
- SpringMvc实现验证码
- faster rcnn代码解读
- 思科模拟器:通过对路由器的RIP设置network命令将连在两台路由器上的电脑连通
- 衡量Oracle系统的存储性能
- android加密aes
- Hibernate 中HQL语句
- 一个故事讲清楚 NIO
- SQLServer多实例更改默认实例
- 第十章练习
- The 2nd MSR Video to Language Challenge
- JSP路径问题
- 服务器返回的HTTP状态码和与之关联的消息
- MySQL添加新用户、为用户创建数据库、为新用户分配权限