Java函数实现数据加密和解密操作
Java语言提供了多种加密和解密算法来保证数据的安全性,本文将介绍如何实现通过Java函数来进行数据加密和解密操作。
一、对称加密算法
对称加密算法是一种密钥加密算法,它的特点是加密和解密使用同一个密钥。Java中常用的对称加密算法有DES、AES等。
1.DES加密和解密
DES(Data Encryption Standard)是一种使用密钥加密的对称块加密算法。Java中实现DES加密和解密需要使用Cipher类。
DES加密代码实现:
public static String desEncrypt(String source, String key) {
try {
// 得到Cipher对象来实现对称加密
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "DES"), iv);
byte[] result = cipher.doFinal(source.getBytes());
// Base64编码
return Base64.encodeBase64String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
DES解密代码实现:
public static String desDecrypt(String source, String key) {
try {
byte[] bytes = Base64.decodeBase64(source);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "DES"), iv);
byte[] result = cipher.doFinal(bytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2.AES加密和解密
AES(Advanced Encryption Standard)是一种高级的对称块加密算法。Java中实现AES加密和解密同样需要使用Cipher类。
AES加密代码实现:
public static String aesEncrypt(String source, String key) {
try {
// 得到Cipher对象来实现对称加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "AES"), iv);
byte[] result = cipher.doFinal(source.getBytes());
// Base64编码
return Base64.encodeBase64String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
AES解密代码实现:
public static String aesDecrypt(String source, String key) {
try {
byte[] bytes = Base64.decodeBase64(source);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("UTF-8"), "AES"), iv);
byte[] result = cipher.doFinal(bytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
二、非对称加密算法
非对称加密算法是一种密钥加密算法,它的特点是加密和解密使用不同的密钥,其中一个是公开密钥,另一个是私有密钥。Java中实现非对称加密和解密需要使用PublicKey和PrivateKey类。
1.RSA加密和解密
RSA是一种非对称加密算法,它使用公开密钥加密和私有密钥解密。Java中实现RSA加密和解密需要使用PublicKey和PrivateKey类。
RSA加密代码实现:
public static String rsaEncrypt(String source, String publicKeyStr) {
try {
byte[] sourceBytes = source.getBytes();
// 获取公钥
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
// 使用公钥加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(sourceBytes);
// Base64编码
return Base64.encodeBase64String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
RSA解密代码实现:
public static String rsaDecrypt(String source, String privateKeyStr) {
try {
byte[] sourceBytes = Base64.decodeBase64(source);
// 获取私钥
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
// 使用私钥解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(sourceBytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2.ECC加密和解密
ECC是一种基于椭圆曲线密码学的非对称加密算法。Java中实现ECC加密和解密需要使用KeyPairGenerator类、ECPublicKey和ECPrivateKey类。
ECC加密代码实现:
public static String eccEncrypt(String source) {
try {
// 生成密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
SecureRandom secureRandom = new SecureRandom();
keyPairGenerator.initialize(new ECGenParameterSpec("secp256k1"), secureRandom);
KeyPair keyPair = keyPairGenerator.genKeyPair();
ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
// 使用公钥加密
Cipher cipher = Cipher.getInstance("ECIES");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(source.getBytes());
// Base64编码
return Base64.encodeBase64String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
ECC解密代码实现:
public static String eccDecrypt(String source, String privateKeyStr) {
try {
byte[] sourceBytes = Base64.decodeBase64(source);
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyStr));
KeyFactory keyFactory = KeyFactory.getInstance("EC");
ECPrivateKey privateKey = (ECPrivateKey) keyFactory.generatePrivate(pkcs8EncodedKeySpec);
// 使用私钥解密
Cipher cipher = Cipher.getInstance("ECIES");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(sourceBytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
三、哈希算法
哈希算法又称散列算法,它将任意长度的输入(又叫做预映射)通过哈希算法变换成固定长度的输出,该输出即为哈希值。Java中实现哈希算法需要使用MessageDigest类。
1.MD5
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希算法,由于它的输出长度固定,所以经常被用来存储密码等敏感信息。Java中实现MD5需要使用MessageDigest类。
MD5加密代码实现:
public static String md5Encrypt(String source) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] result = md5.digest(source.getBytes());
// 转成16进制字符串
StringBuilder sb = new StringBuilder();
for (byte b : result) {
sb.append(String.format("%02X", b));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2.SHA
SHA(Secure Hash Algorithm)是一种安全性更高的哈希算法。Java中实现SHA需要使用MessageDigest类。
SHA加密代码实现:
`Java
public static String shaEncrypt(String source) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte
