gpt4 book ai didi

java - 如何查找哈希码有效性?

转载 作者:行者123 更新时间:2023-12-01 07:16:21 24 4
gpt4 key购买 nike

在我们的应用程序中,我们从 java 对象生成哈希码并将其存储在某个级别的数据库中。现在我的问题是,如果有人手动生成一个数字,有没有办法我可以找出它是否是 JVM 从对象创建的有效哈希码,而不是手动创建的。

最佳答案

如果您想在数据库中保留对象的“签名”,请使用不同的函数。 hashCode 的设计目的并不是难以猜测或进行逆向工程。

由于您使用了 hashCode,我假设您不关心具有相同的 F(X) = F(Y),其中 X 和 Y 是不同的对象。

如果确实如此,请考虑使用散列函数,也许加上一些“ secret ”盐。例如:

public static String signature(Object o)
{
StringBuffer sb = new StringBuffer();
try
{
MessageDigest md5 = MessageDigest.getInstance("md5");
String st = "SECRET!!1" + o.hashCode();
md5.update(st.getBytes());
sb.append(getHexString(md5.digest()));
}
catch (NoSuchAlgorithmException e)
{
throw new RuntimeException("bah");
}
catch (UnsupportedEncodingException e)
{
throw new RuntimeException("bah2");
}
return sb.toString();
}

static final byte[] HEX_CHAR_TABLE =
{
(byte) '0', (byte) '1', (byte) '2', (byte) '3',
(byte) '4', (byte) '5', (byte) '6', (byte) '7',
(byte) '8', (byte) '9', (byte) 'a', (byte) 'b',
(byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f'
};

public static String getHexString(byte[] raw) throws UnsupportedEncodingException
{
byte[] hex = new byte[2 * raw.length];
int index = 0;

for (byte b : raw)
{
int v = b & 0xFF;
hex[index++] = HEX_CHAR_TABLE[v >>> 4];
hex[index++] = HEX_CHAR_TABLE[v & 0xF];
}
return new String(hex, "ASCII");
}

关于java - 如何查找哈希码有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1433336/

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