우리의 응용 프로그램에서 우리는 자바 객체로부터 해시 코드를 생성하고 그것을 어느 수준에서 데이터베이스에 저장합니다. 내 질문은 누군가가 손으로 숫자를 생성하는 경우, 그것이 객체로부터 JVM에 의해 생성 된 유효한 해시 코드인지 수동으로 수동으로 생성되었는지를 알아낼 수있는 방법이 있는지입니다.해시 코드 유효성을 찾는 방법은 무엇입니까?
0
A
답변
3
데이터베이스에 개체의 '서명'을 보관하려면 다른 기능을 사용하십시오. hashCode는 추측하거나 리버스 엔지니어링하기가 어렵지 않습니다.
당신이 hashCode를 사용했기 때문에 동일한 F (X) = F (Y)를 갖는 것에 대해 신경 쓰지 않는다고 가정합니다. 여기서 X와 Y는 다른 객체입니다.
실제로 이러한 경우에는 해싱 기능을 사용하고 아마도 "비밀"소금을 사용하는 것을 고려하십시오. 예 :
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");
}
+0
감사합니다. Omry.This 내가 생각했던 그 코드를 공유해 주셔서 감사합니다. – Rajat
3
아니요, 적어도 int
범위에 속하지는 않습니다. int는 유효한 해시 코드입니다. 특히 int 값 x에 대해 new Integer(x) == x
의 해시.
그러나 객체의 Java 해시 코드를 저장하는 것은 일반적으로 좋은 생각이 아닙니다. 해시 알고리즘이 지정되어 있고 절대로 바뀌지 않을지라도 괜찮습니까? 그렇지 않으면 문제를 알고리즘이 변경되고 해시가 더 이상 일치하지 않습니다.
1
아니요. 기본 hashCode() 연산은 일관성이 있으면 모든 int를 반환 할 자유가 있습니다. 진짜 질문은 너가하려는 것인가?
1
이렇게 찾을 방법이 없습니다.
관련 문제
- 1. 유니 코드 문자의 유효성을 검사하는 방법은 무엇입니까?
- 2. Java Map 해시 코드
- 3. Markdown의 유효성을 검사하는 방법은 무엇입니까?
- 4. 이 클래스의 해시 코드 생성기를 작성하는 방법은 무엇입니까?
- 5. 사전의 단어를 저장하기위한 해시 코드 값을 결정하는 방법은 무엇입니까?
- 6. SQL Server의 해시 코드?
- 7. 해시 코드 고유성
- 8. 효율적인 해시 코드 기능
- 9. 벡터에 해시 코드 설명
- 10. 해시 코드 (Hashcode) 기능
- 11. keyed-HMAC (해시 메시지 인증 코드)
- 12. Xpath를 찾는 방법은 무엇입니까?
- 13. 내년을 찾는 방법은 무엇입니까?
- 14. userclick을 찾는 방법은 무엇입니까?
- 15. d.android.com에서 찾는 방법은 무엇입니까?
- 16. wpf, mainControl 찾는 방법은 무엇입니까?
- 17. 항목을 찾는 가장 효율적인 방법은 무엇입니까?
- 18. 한 줄의 JavaScript 코드 구문 오류를 찾는 방법은 무엇입니까?
- 19. 코드 객체를 가져 오는 파일을 찾는 방법은 무엇입니까?
- 20. Perl에서 유니 코드 문자열의 길이를 찾는 방법은 무엇입니까?
- 21. 웹 서비스가 요청 된 URL의 유효성을 검사하는 방법은 무엇입니까?
- 22. 코드 적용 교차로를 찾는 도구는 무엇입니까?
- 23. 신원에 기반한 Java 해시 코드
- 24. 해시 코드를 사용하여 터치를 참조하는 방법은 무엇입니까?
- 25. adb가 에뮬레이터를 찾는 방법은 무엇입니까?
- 26. 데이터의 주기성을 찾는 방법은 무엇입니까?
- 27. 양식의 colletion을 찾는 방법은 무엇입니까?
- 28. ComboBoxItem의 ParentComboBox를 찾는 방법은 무엇입니까?
- 29. 글로벌 기능을 찾는 방법은 무엇입니까?
- 30. Datalist1에서 컨트롤을 찾는 방법은 무엇입니까?
그렇게 생각하지 마십시오. 기본 해시 코드 구현을 재정의 (override) 할 수도 있습니다 만, 코드 (또는 그 점에 관해서는 JVM)에 의해 작성되었는지, 직접 작성되었는지는 알 수 없습니다. – wtaniguchi