2014-11-21 3 views
-16

MD5 해시 문자열이 있습니다.MD5를 뒤집을 수 있습니까?

def hash(s: String) = { 
    val m = java.security.MessageDigest.getInstance("MD5") 
    val b = s.getBytes("UTF-8") 
    m.update(b, 0, b.length) 
    new java.math.BigInteger(1, m.digest()).toString(16) 
} 

이제 원본 문자열을 다시 원합니다. 어떻게해야합니까?

+3

수 없습니다. 그것은 일방적 인 기능이며 되돌릴 수있는 기능이 아닙니다. – Kayaman

+6

글쎄, MD5는 어느 정도 깨진 것으로 여겨진다. 앞으로 2 년 안에 MD5를 깨뜨리는 데 상당한 발전이있을 것입니다. 따라서 10 년을 기다릴 수 있다면 암호 해독과 컴퓨팅 성능의 발전으로 실질적인 일정에서이를 수행 할 수 있어야합니다. 무지개 테이블을 사용하지 않고도. –

+1

암호를 "암호화"할 때 암호를 제공하지 않았기 때문에 누구나 암호 해독 기능을 실행할 수 있으므로 암호가 암호화 된 경우에도 유용한 형식이 아닙니다. – Boann

답변

5

MD5는 cryptographic hash function 인 AES와 같은 다른 암호화 기술을 사용하여 암호화/해독하려면이는, MD5의 기능입니다. 암호 해시는 일방적 인 기능입니다. 암호 해시 값을 되돌릴 수는 없지만 강제 메시지를 찾아서 강제 검색 할 수 있습니다.

브 루트 포스는 가능한 모든 입력 문자열을 시도한 다음 해시 값이 올바른지 확인하는 것을 의미합니다. 이것은 암호화 해시가 계산 상 고유하기 때문에 가능합니다. 즉, 동일한 해시 값이 생성되는 끝없는 메시지가 있지만 동일한 해시를 초래하는 두 개의 메시지는 불가능합니다. MD5가 깨 졌으므로 메시지에 대한 MD5 해시는 고유하지 않습니다.. 동일한 해시 값을 가진 두 개의 메시지를 찾을 수있는 경우이를 충돌이라고합니다.

레인보우 테이블이라는 거대한 조회 테이블을 만들 수도 있습니다. 이렇게하면 올바른 입력을 찾는 데 도움이됩니다. 이는 상대적으로 작거나 추측 가능한 데이터 입력에만 작용합니다. 즉 그들은 주로 약한 암호를 찾는 데 사용됩니다. 이러한 데이터베이스 중 일부는 온라인에서 찾을 수 있습니다.

+0

질문은 임의의 해시 충돌이 아니라 원래 문자열을 묻습니다. –

+0

@ChrisMartin 암호 학적으로 안전한 해시를 위해 임의의 해시 충돌을 생성하는 것은 불가능합니다. 따라서 동일한 문제가 발생합니다. 근본적으로, 당신이 무차별 한 힘을 가지고 당신이 aswer를 발견한다면, 당신은 그것이 올바른 것임을 확신 할 수 있습니다. –

+0

그래,하지만 "암호로 안전한"은 md5를 설명하는 문구가 아닙니다 –

1

수 없습니다. MD5은 단방향 해시 함수이므로 불가능합니다.

2

당신은 MD5 암호를 해독 할 수 있으며, 데이터는 다음

관련 문제