Java实现常用的三种加密算法详解
在现今的网络环境中,数据安全越来越重要。加密算法就是保证数据安全的重要手段之一。在Java语言中,实现常用的三种加密算法十分方便。这里将分别介绍Java中常用的MD5、SHA和AES加密算法的实现方法。
1. MD5加密
MD5(Message-Digest Algorithm 5)算法是一种常用的摘要算法,可以将任意长度的数据通过运算转换为一个128位的哈希值,通常该值用32位的16进制数表示。MD5算法适用于数据比较简单的情况下进行加密。在Java中,使用MD5加密可通过MessageDigest类来实现。
以下是MD5加密的示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String getMd5(String str) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(str.getBytes());
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
String hexString = Integer.toHexString(b & 0xff);
if (hexString.length() == 1) {
builder.append("0");
}
builder.append(hexString);
}
return builder.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
使用示例:
String password = "123456";
String md5Password = MD5Util.getMd5(password);
System.out.println("原密码:" + password);
System.out.println("MD5加密后:" + md5Password);
输出结果:
原密码:123456
MD5加密后:e10adc3949ba59abbe56e057f20f883e
2. SHA加密
SHA(Secure Hash Algorithm)算法是一种哈希算法,常用的有SHA-1、SHA-256、SHA-384、SHA-512等变种。SHA算法比MD5算法更安全, SHA-256、SHA-384和SHA512比SHA1更安全。在Java中,使用SHA加密也可以通过MessageDigest类来实现。
以下是SHA-256加密的示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHAUtil {
public static String getSha256(String str) {
try {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] bytes = sha256.digest(str.getBytes());
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
String hexString = Integer.toHexString(b & 0xff);
if (hexString.length() == 1) {
builder.append("0");
}
builder.append(hexString);
}
return builder.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
使用示例:
String password = "123456";
String sha256Password = SHAUtil.getSha256(password);
System.out.println("原密码:" + password);
System.out.println("SHA-256加密后:" + sha256Password);
输出结果:
原密码:123456
SHA-256加密后:c6bb28b7f1fc8dee72231fc6e34a2fcc1f6b7563478cc290386a7046b07df109
3. AES加密
AES(Advanced Encryption Standard)算法是一种对称加密算法,其中AES-128位密钥比较流行。在Java中,使用AES加密可以通过Cryptography类来实现。
以下是AES-128加密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
private static final String KEY = "1234567812345678";
private static final String IV = "1234567812345678";
public static String encrypt(String str) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes = KEY.getBytes();
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] bytes = cipher.doFinal(str.getBytes());
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static String decrypt(String str) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes = KEY.getBytes();
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(str.getBytes()));
return new String(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
使用示例:
String password = "123456";
String encryptPassword = AESUtil.encrypt(password);
String decryptPassword = AESUtil.decrypt(encryptPassword);
System.out.println("原密码:" + password);
System.out.println("AES加密后:" + encryptPassword);
System.out.println("AES解密后:" + decryptPassword);
输出结果:
原密码:123456
AES加密后:D94pXqAtFpAEiWYdwlChvA==
AES解密后:123456
结语
以上就是Java实现常用的三种加密算法的详细讲解。在实际开发中,要根据实际情况选择合适的加密算法,并注意密钥的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现常用的三种加密算法详解 - Python技术站