利用Java函数实现数据加密与解密的技术实现
数据加密和解密是信息安全领域常用的技术,它们可以有效地保护用户的隐私信息,防止敏感数据被攻击者窃取或篡改。Java语言是一种流行的编程语言,其提供了许多强大的API和库,可以用于实现数据加密与解密。本文将介绍如何利用Java函数实现数据加密与解密的技术。
一、Java加密函数
Java中加密函数主要由两部分组成,分别是加密算法和密钥管理。Java支持的加密算法有DES、3DES、AES等,密钥管理可以用Java提供的KeyStore类进行管理。
1. DES加密算法
DES是一种对称加密算法,其加密和解密都使用同一密钥。Java中的DES算法可以分为两种模式:ECB模式和CBC模式。
ECB模式:
ECB模式是一种简单的分组密码模式,其加密过程将明文分成固定大小的块,然后对每个块进行加密。
实现代码如下:
public static byte[] desEncrypt(String plainText, String key) {
try {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CBC模式:
CBC模式是一种分组密码模式,在加密前,明文首先与上一个密文块进行异或操作,然后再进行加密。需要注意的是,CBC模式需要初始化向量IV。
实现代码如下:
public static byte[] desCBC(String plainText, String key, String iv) {
try {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
2. 3DES加密算法
3DES算法是对DES算法的改进,其可以有效地提高加密的安全性。与DES类似,3DES也可以分为ECB模式和CBC模式。
ECB模式:
实现代码如下:
public static byte[] tripleDesEncrypt(String plainText, String key) {
try {
DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CBC模式:
实现代码如下:
public static byte[] tripleDesCBC(String plainText, String key, String iv) {
try {
DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
3. AES加密算法
AES算法是一种高级加密标准,其加解密速度比DES和3DES更快。Java中的AES加密算法同样可以分为ECB模式和CBC模式。
ECB模式:
实现代码如下:
public static byte[] aesEncrypt(String plainText, String key) {
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CBC模式:
实现代码如下:
public static byte[] aesCBC(String plainText, String key, String iv) {
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
return cipher.doFinal(plainText.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
二、Java解密函数
Java解密函数与加密函数的实现方式类似,只是在使用Cipher的init方法时,需要指定为解密模式,另外在解密时需要注意加密时使用的IV值和密钥长度。
1. DES解密算法
ECB模式:
实现代码如下:
public static String desDecrypt(byte[] cipherText, String key) {
try {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(cipherText), "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CBC模式:
实现代码如下:
public static String desCBCDecrypt(byte[] cipherText, String key, String iv) {
try {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
return new String(cipher.doFinal(cipherText), "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
2. 3DES解密算法
ECB模式:
实现代码如下:
public static String tripleDesDecrypt(byte[] cipherText, String key) {
try {
DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return new String(cipher.doFinal(cipherText), "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CBC模式:
实现代码如下:
`java
public static String tripleDesCBCDecrypt(byte[] cipherText, String key, String iv) {
try {
DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
return new String(cipher.doFinal(cipherText), "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
