
저는 많은 파일을 저장할 앱을 개발 중입니다. 이미지의 경우 크기를 조정하고 필요한 다양한 썸네일을 저장하므로 사용자가 이미지를 업로드하면 8개의 파일이 더 많이 저장됩니다. ).
파일 중복을 방지하고 정적 호스팅 서버의 공간을 절약하기 위해 내 앱에서는 파일 이름을 "MD5.BYTE_SIZE"(예: 054d995efa7e9c91569d205d24a2b486.188154)로 저장합니다.
나는 이미 다른 클라이언트에서 이 파일 구성표를 아무 문제 없이 사용했지만, 특히 이 프로젝트에 대해 사용자가 동일한 MD5 및 동일한 크기 길이의 파일을 보낼 가능성이 있는지 알아야 합니다.
그렇다면 파일 이름을 저장하는 가장 좋은 방법은 무엇입니까? 두 개의 서로 다른 해시(예: MD5.SHA-256.BYTE_SIZE)를 사용합니까?
답변1
실용적인 목적을 위해 사용자가 MD5에서 가능한 동일한 해시를 가진 두 개의 파일을 적극적으로 생성하려고 시도하지 않는 한 0입니다.
대신 SHA-256을 사용하는 경우 사용자가 동일한 크기의 두 파일을 생성하려고 시도하더라도 "0"(실용적 목적)입니다.
두 개의 다른 파일이 동일한 해시를 생성할 정확한 확률은 약 1/2^128입니다. 생일 역설로 인해 두 파일이 동일한 해시를 가질 확률이 50%가 될 때까지 약 2^64개의 파일이 필요합니다. 실제로는 걱정하지 마십시오. SHA256의 경우 숫자는 각각 1/2^256 및 2^128입니다. 이 숫자는 "일어나지 않을 것"이라고도 알려져 있습니다.
답변2
이론적으로는 가능하지만 실제로는 두 개의 서로 다른 파일이 동일한 MD5 체크섬을 가질 확률은 거의 없습니다.
즉, 프로그램에 관한 한 이 이벤트를 본질적으로 불가능한 것으로 처리할 수 있을 만큼 작습니다.