javaAES实现字符串的加密、解密(配合⼆进制、⼗六进制转换
的⼯具使⽤)
//BinHexSwitchUtil 参考这个链接wwwblogs/xiaoxiao075/p/13230454.html
pto.*;
pto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Base64;
/
/import dec.binary.Base64;
public class EncryptStrUtil {
/**
* KeyGenerator的⽅式,通过传⼊种⼦串⽣成key,进⾏加密
* @param seed ⽣成key传⼊的种⼦串
* @param toEncryptStr 要加密的字节数组
* @return返回 Base64 的加密字符串
*/
public static String encrypt(String seed, byte[] toEncryptStr) {
try {
Encoder().encodeToString(getCipher(seed, Cipher.ENCRYPT_MODE).doFinal(toEncryptStr));  //此时使⽤的 Base64 编码
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据传⼊的⼆进制 key数组,返回AES的⼗六进制加密串
* @param keyBytes
* @param toEncryptStr
* @return
*/
public static String encrypt(byte[] keyBytes, byte[] toEncryptStr) {
try {
return BinHexSwitchUtil.bytesToHexString(getCipher(keyBytes, Cipher.ENCRYPT_MODE).doFinal(toEncryptStr));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* KeyGenerator的⽅式,通过传⼊种⼦串⽣成key,进⾏解密
* @param seed ⽣成key传⼊的种⼦串
* @param encryptedStr 要解密的字节数组,Base64加密的
* @return返回解密的字节数组
*/
public static byte[] decrypt(String seed, byte[] encryptedStr) {
try {
return getCipher(seed, Cipher.DECRYPT_MODE).Decoder().decode(encryptedStr));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据传⼊的⼆进制 key数组,将16进制加密串解密
* @param keyBytes
* @param encryptedStr 要解密的字符串
* @return已解密的⼆进制数组
*/
public static byte[] decrypt(byte[] keyBytes, String encryptedStr) {
try {
return getCipher(keyBytes, Cipher.DECRYPT_MODE).doFinal(BinHexSwitchUtil.hexStringTobytes(encryptedStr));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* KeyGenerator 的⽅式⽣成key,获取密码⽣成器
* @param seed 传⼊的种⼦字符串
* @param encryptMode 传⼊加密模式、解密模式
* @return返回密码⽣成器
* @throws Exception
*/
private static Cipher getCipher(String seed, int encryptMode) throws Exception {
/
/⽣成加密随机数
SecureRandom random = Instance("SHA1PRNG");
//并设置seed
random.Bytes());
字符串转数组编码方式//创建AES⽣产者
KeyGenerator generator = Instance("AES");
//初始化⽣产者,128位
generator.init(128, random);
Key ateKey();
// 返回基本编码格式的密钥(初始key),如果此密钥不⽀持编码,则返回null。
//        byte[] enCodeFormat = ateKey().getEncoded();
/
/
//        SecretKey key = new SecretKeySpec(enCodeFormat, "AES");//应该没有必要再次⽣成⼀次 SecretKey        // 创建密码器
Cipher cipher = Instance("AES");
//初始化解码器,这⾥根据是加密模式还是解码模式
cipher.init(encryptMode, key);
return cipher;
}
/**
* SecretKey的⽅式⽣成key,根据传⼊的⼆进制数组获取密码⽣成器
* @param keyBytes
* @param encryptMode
* @return
* @throws Exception
*/
private static Cipher getCipher(byte[] keyBytes, int encryptMode) throws Exception {
SecretKey key = new SecretKeySpec(keyBytes, "AES");//根据传⼊的⼆进制数组⽣成SecretKey
// 创建密码器
Cipher cipher = Instance("AES");
//初始化解码器,这⾥根据是加密模式还是解码模式
cipher.init(encryptMode, key);
return cipher;
}
public static void main(String[] args) {
String key="1234567890123456";
String str="nihaoma";
String Bytes(),Bytes());
System.out.println(miStr);
byte[] noMiStr=EncryptStrUtil.Bytes(),miStr);
System.out.String(noMiStr));
System.out.println(new String(noMiStr));
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。