JAVA spring boot 将长字符串生成12位唯一加密字符串,支持解密
时间: 2023-08-21 22:05:42 浏览: 159
Springboot实现密码的加密解密
可以使用Java提供的MessageDigest类来对字符串进行加密,生成唯一的加密字符串。具体实现方法如下:
1. 导入java.security.MessageDigest类
```java
import java.security.MessageDigest;
```
2. 创建一个MessageDigest对象
```java
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
```
3. 将需要加密的字符串转化为字节数组
```java
byte[] input = str.getBytes();
```
4. 使用MessageDigest对象进行加密,并将结果转化为字符串
```java
byte[] output = messageDigest.digest(input);
String result = bytesToHex(output);
```
其中,bytesToHex方法将字节数组转化为16进制字符串。
5. 截取生成的字符串前12位作为唯一加密字符串
```java
String encryptedStr = result.substring(0, 12);
```
6. 可以将加密后的字符串进行解密,但是MD5加密是不可逆的,无法进行解密。
完整代码如下:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class EncryptUtil {
/**
* 将字符串加密成唯一的12位字符串
*
* @param str 需要加密的字符串
* @return 唯一的加密字符串
*/
public static String encrypt(String str) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] input = str.getBytes();
byte[] output = messageDigest.digest(input);
String result = bytesToHex(output);
return result.substring(0, 12);
}
/**
* 将字节数组转化为16进制字符串
*
* @param bytes 字节数组
* @return 16进制字符串
*/
private static String bytesToHex(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
stringBuilder.append('0');
}
stringBuilder.append(hex);
}
return stringBuilder.toString();
}
}
```
使用方法:
```java
public static void main(String[] args) throws NoSuchAlgorithmException {
String str = "hello world";
String encryptedStr = EncryptUtil.encrypt(str);
System.out.println("加密前:" + str);
System.out.println("加密后:" + encryptedStr);
}
```
阅读全文