在Java中,字符串是一种常见的数据类型,我们经常需要对其进行加密和解密。这篇文章将会介绍在Java中字符串如何进行加密和解密。
一、加密算法
Java中字符串如何进行加密和解密
在Java中,常用的加密算法有MD5、SHA1和AES等。下面对这些加密算法进行简单介绍。
- MD5
MD5是一种常见的加密算法,它可以将任意长度的字符串加密成一个固定长度(128位)的字符串。Java中提供了java.security.MessageDigest类来实现MD5加密算法。
生成MD5加密后的字符串的代码如下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
// 生成MD5加密后的字符串
public static String getMD5(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance(\MD5\ md.update(str.getBytes());
byte[] b = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < b.length; i++) {
int val = ((int) b[i]) & 0xff;
if (val < 16) {
sb.append(\0\ }
sb.append(Integer.toHexString(val));
}
return sb.toString();
}
}
- SHA1
SHA1也是一种常见的加密算法,它可以将任意长度的字符串加密成一个固定长度(160位)的字符串。Java中提供了java.security.MessageDigest类来实现SHA1加密算法。
生成SHA1加密后的字符串的代码如下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA1Util {
// 生成SHA1加密后的字符串
public static String getSHA1(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance(\SHA1\ md.update(str.getBytes());
byte[] b = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < b.length; i++) {
int val = ((int) b[i]) & 0xff;
if (val < 16) {
sb.append(\0\ }
sb.append(Integer.toHexString(val));
}
return sb.toString();
}
}
- AES
AES是一种高级加密标准,它可以将任意长度的字符串加密成一个固定长度(128位、192位或256位)的字符串。Java中提供了javax.crypto.Cipher类来实现AES加密算法。
生成AES加密后的字符串的代码如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
// 生成AES加密后的字符串
public static String getAES(String str, String key) throws Exception {
// 生成密钥
KeyGenerator kgen = KeyGenerator.getInstance(\AES\ kgen.init(128);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, \AES\ // 初始化加密器
Cipher cipher = Cipher.getInstance(\AES\ cipher.init(Cipher.ENCRYPT_MODE, keySpec);
// 加密
byte[] byteContent = str.getBytes(\utf-8\ byte[] result = cipher.doFinal(byteContent);
return new String(result, \utf-8\ }
}
二、解密算法
解密算法是将加密后的字符串还原成原始字符串的算法。在Java中,常用的解密算法有MD5、SHA1和AES等。
- MD5
由于MD5算法是不可逆的,所以在Java中不提供MD5的解密算法。
- SHA1
由于SHA1算法是不可逆的,所以在Java中不提供SHA1的解密算法。
- AES
AES算法可以使用相同的密钥将加密后的字符串解密成原始字符串。Java中提供了javax.crypto.Cipher类来实现AES解密算法。
生成AES解密后的字符串的代码如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
// 生成AES解密后的字符串
public static String getAES(String str, String key) throws Exception {
// 生成密钥
KeyGenerator kgen = KeyGenerator.getInstance(\AES\ kgen.init(128);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, \AES\ // 初始化解密器
Cipher cipher = Cipher.getInstance(\AES\ cipher.init(Cipher.DECRYPT_MODE, keySpec);
// 解密
byte[] byteContent = str.getBytes(\utf-8\ byte[] result = cipher.doFinal(byteContent);
return new String(result, \utf-8\ }
}
三、总结
本文介绍了在Java中字符串如何进行加密和解密。通过对MD5、SHA1和AES加密算法的介绍,我们可以了解到在Java中如何实现这些算法。