对称加密算法
数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
主要对称算法有:DES(实际密钥只用到56 位),AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等。
类 SecretKeySpec
可以使用此类来根据一个字节数组构造一个 SecretKey;
构造方法:
SecretKeySpec(byte[] key, String algorithm);//根据给定的字节数组和加密
算法构造一个密钥
例:SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
类 Cipher
加密工具,为加密和解密提供密码功能;
构造参数包括加密算法的名称(例如,AES),后面可能跟有一个反馈模式和填充方案;
例:Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//(“算法/模式/填充”或“算法”)
AES算法五种加密模式
1. 电码本模式(Electronic Codebook Book (ECB));2.密码分组链接模式(Cipher Block Chaining (CBC));3.计算器模式(Counter (CTR));4.密码反馈模式(Cipher FeedBack (CFB));5.输出反馈模式(Output FeedBack (OFB))。
IvParameterSpec实现AlgorithmParameterSpec接口
IvParameterSpec ivParameter = new IvParameterSpec(IV.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameter);//用密钥和一组算法参数初始化此 Cipher
byte[] result = cipher.doFinal(byteContent);//按单部分操作加密或解密数据,或者结束一个多部分操作,在此为加密
原代码:
public static String encrypt(String content) {
try {
SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivParameter = new IvParameterSpec(IV.getBytes("UTF-8"));
byte[] byteContent = content.getBytes("UTF-8");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameter);
byte[] result = cipher.doFinal(byteContent);
StringBuffer sb = new StringBuffer();
if (null != result && 0 < result.length) {
for (int i = 0; i < result.length; i++) {//循环取出加密后字节流中的每一个字节
//取出的字节与“11111111”按位相与后以字符串形式返回16进制整形
String temp = Integer.toHexString(result[i] & 0xFF);
if (1 == temp.length()) {
temp = "0" + temp;
}
sb.append(temp);
}
}
return sb.toString().toUpperCase();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}