JAVA字符串加密方法
在JAVA中,常见的字符串加密方法有MD5加密、SHA1加密和BASE64加密。下面分别介绍每种加密方法。
MD5加密
MD5全名为Message-DigestAlgorithm 5,即消息摘要算法5。它是一种单向加密算法,加密后的结果不能被逆向破解。MD5加密的原理是将任意长度的数据(字符串)通过一定的算法变换成一个固定长度的摘要信息(通常是32位的十六进制字符串表示),不同的输入得到的结果是完全不同的。MD5加密的代码示例如下:
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有这个md5算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
SHA1加密
SHA1是一种单向加密算法,它和MD5算法类似,只不过SHA1生成的摘要信息(通常是40位的十六进制字符串表示)更长,更加安全。SHA1加密的代码示例如下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA1Util {
public static String sha1(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("SHA-1")
.digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有这个SHA-1算法!");
}
String sha1code = bytesToHexString(secretBytes);
return sha1code;
}
public static String bytesToHexString(byte[] bytes) {
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
builder.append("0");
}
builder.append(hex.toUpperCase());
}
return builder.toString();
}
}
BASE64加密
BASE64是一种可逆的加密算法,加密后的字符只包含A~Z、a~z、0~9、+、/和=这些字符,它可以将二进制数据编码成文本格式,方便传输和存储。BASE64加密的代码示例如下:
import java.util.Base64;
public class BASE64Util {
public static String base64Encode(String str) {
byte[] bytes = str.getBytes();
String encoded = Base64.getEncoder().encodeToString(bytes);
return encoded;
}
public static String base64Decode(String encodedStr) {
byte[] decoded = Base64.getDecoder().decode(encodedStr);
String decodedStr = new String(decoded);
return decodedStr;
}
}
JAVA密码加密方法
在JAVA中,常见的密码加密方法有bcrypt加密和PBKDF2加密。下面分别介绍每种加密方法。
bcrypt加密
bcrypt是一种单向加密算法,它通过增加工作因子的方式,来增加暴力破解的难度,从而提高安全性。bcrypt的工作因子越大,算法就越安全,但也越慢。bcrypt加密的代码示例如下:
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class BcryptUtil {
private static final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(10);
public static String bcryptEncode(String str) {
String encoded = passwordEncoder.encode(str);
return encoded;
}
public static boolean bcryptMatch(String str, String encodedStr) {
boolean match = passwordEncoder.matches(str, encodedStr);
return match;
}
}
PBKDF2加密
PBKDF2是一种单向加密算法,它通过增加迭代次数的方式,来增加暴力破解的难度,从而提高安全性。PBKDF2的迭代次数越多,算法就越安全,但也越慢。PBKDF2加密的代码示例如下:
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
public class PBKDF2Util {
private static final int ITERATIONS = 4096;
private static final int KEY_LENGTH = 256;
public static byte[] generateSalt() {
byte[] salt = new byte[16];
SecureRandom random = new SecureRandom();
random.nextBytes(salt);
return salt;
}
public static byte[] pbkdf2(char[] password, byte[] salt) {
PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH);
SecretKeyFactory skf;
byte[] hash = null;
try {
skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
hash = skf.generateSecret(spec).getEncoded();
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
}
return hash;
}
}
以上是JAVA字符串加密、密码加密的实现方法,可以根据具体需求选择使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA 字符串加密、密码加密实现方法 - Python技术站