java 加密算法输出长度固定且为英文数字且可逆
时间: 2024-10-14 21:04:33 浏览: 48
pc1-128-java.zip_Java加密_java 加密_pc1_pc1 java
在Java中,如果你需要一个加密算法生成固定长度、包含英文数字并且可以逆向解密的字符串,你可以考虑使用哈希函数或者简单的位操作结合Base64编码。例如,可以使用`MessageDigest`类配合SHA-256算法生成散列值,并将结果转换成十六进制或Base64格式。
以下是一个简单的例子使用SHA-256和Base64:
```java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class FixedLengthCrypto {
private static final String SECRET_KEY = "your_secret_key"; // 需要保密的密钥
public String encrypt(String input) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] hashBytes = mac.doFinal(input.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hashBytes);
}
public String decrypt(String encryptedInput) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] decodedHashBytes = Base64.getDecoder().decode(encryptedInput);
byte[] originalBytes = mac.doFinal(decodedHashBytes);
return new String(originalBytes, StandardCharsets.UTF_8);
}
}
```
在这个示例中,加密后的字符串通常是固定的长度,因为它基于原始输入的哈希,但它是可逆的,因为相同的密钥和加密过程可以用于解密。
注意:虽然这个例子满足了基本要求,但在实际应用中,特别是涉及到安全的场景,你应该选择更安全的对称或非对称加密算法,如AES等。
阅读全文