gpt4 book ai didi

java - 如何使用 Java 在 XML 文件中保存加密/散列密码

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:38 31 4
gpt4 key购买 nike

我想将密码保存在 XML 文件中。但明文不够安全。所以我想将它保存为散列值或加密数据。但我不知道该怎么做。由于 MD5 或 SHA-2 是一种单向散列。或者如果我用盐,应该可以节省盐的值(value)。

那我能做什么呢?请帮我解决这个问题。

最佳答案

您可以使用javax.crypto包来加密/解密密码。

首先,您必须定义加密 key 和加密初始 vector 。例如:

String secret = "Foo12345Bar12345";
String initVector = "randomInitVector";

然后你可以编写加密/解密密码的方法。

public static String encrypt(String value, String secret, String initVector) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes());
SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.encodeBase64String(encrypted);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}

public static String decrypt(String value, String secret, String initVector) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes());
SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
byte[] decrypted = cipher.doFinal(Base64.decodeBase64(str));
return new String(decrypted);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}

要运行此代码,您需要将 apache 依赖项添加到您的项目中

<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>

此外,Java 8 已经有了解码/编码 Base64 的工具:java.util.Base64.getDecoder()java.util.Base64.getEncoder() 这样您就可以用 Java 8 impl 替换 Apache

关于java - 如何使用 Java 在 XML 文件中保存加密/散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640905/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com