Java에서 문자열 세트의 해시를 계산하고 싶습니다. 예, 문자열을 정렬하고 digest.update
을 사용하여 MD5 해시 반복을 계산할 수 있습니다. 그러나 나는 종류를 생략하고이 같은 등을 묻는 비슷한 질문이 많이 Order-independant Hash Algorithm 같다하지만 그들 중 비 자바에서 반복 주문 독립적 인 해시를 계산하는 방법을 보여주는 간단한 예제를 제공 combineUnordered
https://github.com/google/guava/wiki/HashingExplained 같은 것을 사용하는 것을 선호 것 .Java에서 독립적 인 해시를 주문하십시오.
답변
그냥 XOR 각 해시를하고 순서가 중요하지 않으며 플러스 해시 크기가 컬렉션의 크기가 커지기보다는 고정 될 것입니다.
해시 코드는 int 자바 문자열의 해시 코드에 내장 된 사용 : 질문과 같은
int hashcode = strings.stream()
.mapToInt(Object::hashCode)
.reduce(0, (left, right) -> left^right);
해시 코드 (Hashcode) 사용 구아바와 MD5 질문 :
Optional<byte[]> hash = strings.stream()
.map(s -> Hashing.md5().hashString(s, Charset.defaultCharset()))
.map(HashCode::asBytes)
.reduce((left, right) -> xor(left, right));
static byte[] xor(byte[] left, byte[] right) {
if(left.length != right.length) {
throw new IllegalArgumentException();
}
byte[] result = new byte[left.length];
for(int i=0; i < result.length; i++) {
result[i] = (byte) (left[i]^right[i]);
}
return result;
}
이것은 선호되는 방법입니다. 해시를 XOR하는 것은 그것들을 추가하는 것보다 낫습니다. –
@ Magnus 덕분에 XOR을 사용해 보겠습니다. –
각 문자열의 MD5 해시를 개별적으로 계산 한 다음 모두를 추가하여 단일 해시를 얻을 수 있습니다. 그것은 순서에 독립적입니다. 덧셈 연산은 교환 가능하기 때문에. 여기
은 예입니다 (우리가 가정하는 방법 md5Hex 주어진 문자열의 MD5 해시를 계산하고 16 진수 형식의 결과를 반환합니다 (문자열 STR)) :String[] strings = {"str1", "str2", "str3", ...};
BigInteger hashSum = BigInteger.ZERO;
for(String s : strings) {
String hexHash = md5Hex(s);
hashSum = hashSum.add(new BigInteger(hexHash, 16));
}
String finalHash = hashSum.toString(16);
네, 고맙습니다. 질문의 배경 (비록 downwoted)이 방법으로 가야하거나 정렬되지 않은 가능성을 결합 할 수있는 몇 가지 대안 해시 알고리즘을 사용하여 충돌을 덜 받았다. –
@MarmiteBomber, 예제를 추가했습니다. – elyor
- 1. 시스템 독립적 인 시스템 종료
- 2. 를 인쇄 OS에 독립적 인 아키텍처 독립적 인 방법
- 3. 독립적 인 복제는
- 4. 플랫폼 독립적 인 방법
- 5. 독립적 인 요소 Widdths
- 6. 위치 독립적 인 코드
- 7. 독립적 인 개인 세션
- 8. 독립적 인 더블 피커
- 9. 시뮬레이트적인 독립적 인 제스처
- 10. 독립적 인 액티브 쿼리
- 11. 조건부 독립적 인 동전
- 12. 독립적 인 시리즈의 DyGraph
- 13. fullpage.js 독립적 인 섹션
- 14. Java에서 플랫폼 독립적 인 GUI를 만드는 방법은 무엇입니까?
- 15. Java에서 독립적 인 파일 읽기 플랫폼을 만드는 방법
- 16. Java에서 쌍 독립적 해시 함수
- 17. 로케일 독립적 인 strtod 구현
- 18. IDE 독립적 인 수은 리포지토리
- 19. 플랫폼 독립적 인 목표 C
- 20. IE와 독립적 인 웹 브라우저
- 21. 화면 방향에서 독립적 인 레이아웃
- 22. extjs가 브라우저 독립적 인 방법
- 23. 개체의 독립적 인 복사본을 만듭니다.
- 24. NodeJs에서 독립적 인 프로세스 시작
- 25. 배포판 독립적 인 libpython 경로
- 26. OpenGL에서 독립적 인 투명도 주문
- 27. 독립적 인 모듈을 게시/내보내기
- 28. 키보드와 독립적 인 물음표 감지
- 29. 비주얼 스타일 독립적 인 드로잉
- 30. 데이터 독립적 인 UI로드 방법
을 youneed이 세트의 해시 알고리즘을 덮어 이유는 무엇입니까 ? –
@ SzigyártóMihály 겹쳐 쓸 필요가 없습니다. 간단한 예제를 찾고 있습니다. 나는 명령에 민감한 MD5와 MurmurHash를 안다. 그러나 나는 그것을 사용하는 예를 찾을 수 없었다. –
집합은 아이템의 해시 합계를 사용하며 순서에 따라 다릅니다. –