gpt4 book ai didi

隐藏主键的Java加密性能

转载 作者:行者123 更新时间:2023-11-29 06:32:28 25 4
gpt4 key购买 nike

我需要从最终用户输出中隐藏某些原始值(主要是主键,每个请求可能大约有 100 个),这样数据库就不容易被探测或迭代。加密速度比值的实际不可渗透性更重要。

我目前在以下包装器中使用 PBEWithMD5AndDES - 这是不是太过分了?我不熟悉使用 Java 作为 Web 后端。

public class SecurityHelper {
private static final String DEFAULT_KEY = "some-key-here";
private SecretKey secretKey;
private PBEParameterSpec parameterSpec;
private Cipher cipher;

public SecurityHelper() {
try {
char[] moduleKeyChars = DEFAULT_KEY.toCharArray();
KeySpec keySpec = new PBEKeySpec(moduleKeyChars);
secretKey = SecretKeyFactory.getInstance(
"PBEWithMD5AndDES").generateSecret(keySpec);
parameterSpec = new PBEParameterSpec(new byte[8], 1);
cipher = Cipher.getInstance("PBEWithMD5AndDES");
} catch (Exception e) {
e.printStackTrace();
}
}

public String encrypt(String secret) {
String encrypted = null;
try {
cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec);
byte[] stateBytes = cipher.doFinal(secret.getBytes("UTF-8"));
encrypted = DatatypeConverter.printBase64Binary(stateBytes);
} catch (Exception e) {
e.printStackTrace();
}
return encrypted;
}

public String decrypt(String encrypted) {
String decrypted = null;
try {
cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec);
byte[] stringBinary = DatatypeConverter.parseBase64Binary(encrypted);
decrypted = new String(cipher.doFinal(stringBinary));
} catch (Exception e) {
e.printStackTrace();
}
return decrypted;
}

}

或者我使用像 XOR cipher 这样的东西会更好吗? ?

最佳答案

如果您确实想对用户隐藏这些值,我不明白您为什么要对它们进行加密或散列处理。您应该做的是生成随机且唯一的 key 。您是否考虑过使用 GUID?

如果您认为 GUID 太长,您可以生成一个预定义长度的随机字符串。使您的数据库列成为唯一索引,以便加快搜索速度。

这就是 bit.ly 或 goo.gl 等 URL 缩短器的工作原理。这将防止任何人使用主键在您的数据库中爬行。

关于隐藏主键的Java加密性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714229/

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