java中常用的加密以及AES加密的使用
程序员文章站
2024-03-14 14:55:16
...
Java中常用的加密有哪些?
AES:更快,兼容设备,安全级别高;
SHA1:公钥后处理回传
DES:本地数据,安全级别低
RSA:非对称加密,有公钥和私钥
MD5:防篡改
介绍其中一种AES对数据进行加密
/**
* <p>
* Title: AES加密
* </p>
* <p>
* Description:使用AES进行加减密
* </p>
*
* @author zyh
* @date 2019/03/11
*/
public class AESTest {
static final String ALGORITHM = "AES";
final static String charsetName = "UTF-8";
static Charset charset = Charset.forName(charsetName);
// 加密解密需要key,所以需要一个生成key的函数
public static SecretKey generateKey() throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
// Random是一个伪随机数,他是根据日期和时间来产生随机数的,不安全
SecureRandom secureRandom = new SecureRandom();
// 对keyGenerator进行初始化
keyGenerator.init(secureRandom);
// 然后我们开始生成key
SecretKey secretKey = keyGenerator.generateKey();
return secretKey;
}
// 加密函数,加密之后的字节数组
public static byte[] encrypt(String connet, SecretKey secretKey) throws Exception {
return aes(connet.getBytes(charset), Cipher.ENCRYPT_MODE, secretKey);
}
// 解密函数,返回一个解密之后的字符串
public static String decrypt(byte[] contentArray, SecretKey secretKey) throws Exception {
byte[] result = aes(contentArray, Cipher.DECRYPT_MODE, secretKey);
return new String(result, charsetName);
}
// 在java中加密和减秘的唯一区别是模式不同,所以在这写个aes函数
private static byte[] aes(byte[] contentArray, int mode, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(mode, secretKey);
// 处理数据比较小用doFinal,要是处理数据比较多要先循环执行update最后执行doFinal
byte[] result = cipher.doFinal(contentArray);
return result;
}
public static void main(String[] args) {
String content = "这里是需要加密的数据";
try {
SecretKey secretKey = generateKey();
byte[] encryptResult = encrypt(content, secretKey);
System.out.println("加密后的结果为:" + new String(encryptResult, charsetName));
String decryptResult = decrypt(encryptResult, secretKey);
System.out.println("解密后的结果为:" + decryptResult);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上一篇: DES代码讲解