写一个java 加密字符串缩小间隙锁范围的方法
时间: 2024-10-26 10:03:26 浏览: 16
在Java中,我们可以使用一些加密算法,如AES(Advanced Encryption Standard)或Base64编码来对字符串进行加密并减小原始信息的直接可读性。这里是一个简单的例子,使用`javax.crypto.Cipher`类配合AES加密来实现:
```java
import javax.crypto.Cipher;
import java.security.Key;
import java.util.Base64;
public class StringEncryption {
// 使用密钥管理器获取一个AES密钥
private static Key generateKey() {
try {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 可调整密钥长度
return keyGen.generateKey();
} catch (Exception e) {
throw new RuntimeException("Failed to generate AES key", e);
}
}
public static String encrypt(String plainText, Key key) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 初始化加密器
byte[] iv = cipher.getBlockSize(); // 获取初始化向量
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv)); // 初始化加密模式
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes()); // 加密
return Base64.getEncoder().encodeToString(encryptedBytes); // 编码为Base64字符串
}
public static String decrypt(String encryptedText, Key key) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] decodedBytes = Base64.getDecoder().decode(encryptedText); // 解码Base64字符串
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(cipher.getBlockSize()));
byte[] decryptedBytes = cipher.doFinal(decodedBytes); // 解密
return new String(decryptedBytes); // 转换回原字符
}
public static void main(String[] args) {
try {
Key secretKey = generateKey();
String originalText = "这是一个需要加密的字符串";
String encrypted = encrypt(originalText, secretKey);
System.out.println("Encrypted string: " + encrypted);
String decrypted = decrypt(encrypted, secretKey);
System.out.println("Decrypted string: " + decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们首先生成一个AES密钥,然后使用这个密钥加密和解密字符串。通过这种方式,即使字符串被截取或公开,其内容也是不可直接解读的。
阅读全文