Java中如何实现字符串加密函数?
发布时间:2023-10-13 08:54:22
字符串加密函数可以使用Java中的加密算法进行实现。Java中提供了多种加密算法,如MD5、SHA-1、SHA-256等。
一、使用MD5进行字符串加密:
MD5是一种常用的哈希算法,可以将字符串转换为长度固定且不可逆的密文。
示例代码如下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Encryption {
public static String encrypt(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] result = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : result) {
int val = (int) b & 0xff;
if (val < 16) {
sb.append("0");
}
sb.append(Integer.toHexString(val));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String str = "hello world";
String encryptedStr = encrypt(str);
System.out.println("Encrypted string: " + encryptedStr);
}
}
上述代码中,首先获取MD5加密算法的实例,然后通过update方法将字符串转换为字节数组,并使用digest方法计算密文。最后,使用StringBuilder拼接密文,并将其转换为十六进制表示的字符串。
二、使用AES进行字符串加密:
AES是一种对称加密算法,可以将字符串通过密钥加密,然后再通过相同的密钥解密。
示例代码如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
public class AESEncryption {
public static String encrypt(String str, String key) {
try {
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(key.getBytes());
keyGen.init(128, secureRandom);
SecretKey secretKey = keyGen.generateKey();
byte[] encodedKey = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(encodedKey, "AES");
// 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encryptedBytes = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String decrypt(String str, String key) {
try {
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(key.getBytes());
keyGen.init(128, secureRandom);
SecretKey secretKey = keyGen.generateKey();
byte[] encodedKey = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(encodedKey, "AES");
// 解密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] bytes = Base64.getDecoder().decode(str);
byte[] decryptedBytes = cipher.doFinal(bytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String str = "hello world";
String key = "secret_key";
String encryptedStr = encrypt(str, key);
String decryptedStr = decrypt(encryptedStr, key);
System.out.println("Encrypted string: " + encryptedStr);
System.out.println("Decrypted string: " + decryptedStr);
}
}
上述代码中,首先使用密钥生成器生成密钥,然后通过密钥初始化加密算法的实例。使用doFinal方法进行加密或解密操作。最后,使用Base64进行编码或解码,将结果转换为字符串。
