Java中常用的加密函数及实现方法
发布时间:2023-05-20 05:38:24
Java中常用的加密函数有MD5、SHA、DES、AES等。这些加密函数都是用来保护我们的敏感信息的,比如密码、身份证信息等。
MD5是一种常用的哈希函数,即将原始数据压缩成一段固定长度的数据,不可逆转。MD5就是将原始数据通过一系列复杂的计算得到一个128位的哈希值,具有高效性、安全性、不可逆性等优点。Java中实现MD5加密可以使用java.security.MessageDigest类,具体代码如下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String getMD5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] byteDigest = md.digest();
int i;
StringBuffer stringBuffer = new StringBuffer("");
for (int offset = 0; offset < byteDigest.length; offset++) {
i = byteDigest[offset];
if (i < 0)
i += 256;
if (i < 16)
stringBuffer.append("0");
stringBuffer.append(Integer.toHexString(i));
}
return stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
SHA也是一种哈希函数,与MD5相似,它将原始数据压缩成一段固定长度的数据。SHA1是最常用的哈希函数之一,也是安全性较高的哈希函数之一。使用Java中的SHA1加密算法可以使用如下代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHAUtil {
public static String getSHA(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(str.getBytes());
byte[] byteDigest = md.digest();
int i;
StringBuffer stringBuffer = new StringBuffer("");
for (int offset = 0; offset < byteDigest.length; offset++) {
i = byteDigest[offset];
if (i < 0)
i += 256;
if (i < 16)
stringBuffer.append("0");
stringBuffer.append(Integer.toHexString(i));
}
return stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
DES是一种对称加密算法,即使用相同的密钥加密和解密。在Java中,可以使用javax.crypto包中的DES算法实现加密。具体代码如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class DESUtil {
private static final String ALGORITHM = "DES";
public static String encrypt(String content, String key) {
SecretKey secretKey = generateKey(key);
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(content.getBytes());
return Base64.getEncoder().encodeToString(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String decrypt(String content, String key) {
SecretKey secretKey = generateKey(key);
byte[] contentBytes = Base64.getDecoder().decode(content);
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(contentBytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static SecretKey generateKey(String key) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
SecureRandom secureRandom = new SecureRandom(key.getBytes());
keyGenerator.init(secureRandom);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encodeFormat = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(encodeFormat, ALGORITHM);
return keySpec;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
AES也是一种对称加密算法,与DES相比,它提供了更高的安全性和更快的速度。在Java中,可以使用javax.crypto包中的AES算法实现加密。具体代码如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class AESUtil {
private static final String ALGORITHM = "AES";
public static String encrypt(String content, String key) {
SecretKey secretKey = generateKey(key);
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(content.getBytes());
return Base64.getEncoder().encodeToString(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String decrypt(String content, String key) {
SecretKey secretKey = generateKey(key);
byte[] contentBytes = Base64.getDecoder().decode(content);
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(contentBytes);
return new String(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static SecretKey generateKey(String key) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
SecureRandom secureRandom = new SecureRandom(key.getBytes());
keyGenerator.init(secureRandom);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encodeFormat = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(encodeFormat, ALGORITHM);
return keySpec;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
以上是Java中常用的加密函数及实现方法。使用这些加密函数可以很好地保护敏感信息和数据安全。
