짧고 고유 한 파일/폴더 이름을 생성하는 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/809390

  •  03-07-2019
  •  | 
  •  

문제

기준은 기본적으로 다음과 같습니다.

  • 폴더는 약 24-48 시간 동안 존재합니다
  • 폴더 이름은 사용자가 쉽게 추측 할 수 없습니다 (URL에서 사용되는 경우)
  • 폴더 이름은 짧은 5-15 숯이어야합니다

초기 생각 :

printf('%u',crc32(microtime(true)));

세부 사항 : 파일을 업로드 할 때 기본적으로 고유 한 파일 이름을 업 로더의 이름으로 유지하려고하므로 명명 충돌을 피하기 위해 고유 한 명명 된 디렉토리에 넣고 싶습니다 ...

도움이 되었습니까?

해결책

편집] 잠깐만 기다리십시오. PHP는 표준 라이브러리에 오른쪽을 포함합니다 고유 한 ID 생성기 기능. 거기 있습니다 다른 접근법 도.

다른 팁

고전적인 기술은 같은 것으로 보입니다

  + uploader-name  
    + 20090401
      + 010000     // hhmmss
      + 013000     // hhmmss
      + 014500     // hhmmss
    ...

    + 20090402

레벨 추가, "a", "b", "c", ...

이것은 ESP에서 작동합니다. 사용자가 연대순으로 파일과 관련이있는 경우.

당신은 결국 몇 가지 존재 열거를하게되지만 그렇게 고통 스럽지는 않습니다. 나는 이것을 여러 번 사용했습니다 (PHP 포함). 주로 사용자 저항이 내가 찾은 대안보다 낮기 때문입니다.

당신이 너무 기울어지면 날짜 표현을 아름답게 할 수 있습니다-"2009-APR-01", "01:45 AM"등

언어는 명시되지 않았으며, 루비에서는 다음과 같습니다.

require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)

=> "f531384b3cc8c60b7c5b7ad087cb0ae4"

이것은 "모호한 보안"문제처럼 들립니다. 잠재적으로 민감한 데이터를 생성하고 아무도 위치를 추측하지 않을 것이라는 기대가 있기 때문에 안전한 방식으로 (짧은 시간조차도) 노출하는 것을 권장합니다. 무차별 인력 공격이 존재하며 이러한 유형의 "보안"을 찢을 수 있습니다.

이름을 생성하려면 날짜와 시간을 사용하십시오.

나는 다음과 같은 것을 사용할 것입니다.

$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));

날짜 ( 'u') UNIX Epoch (1970 년 1 월 1 일 00:00:00 GMT) 이후 몇 초를 반환하므로 여러 폴더를 동시에 생성하지 않으면 고유 할 것입니까?

이 경우 $ 소금 값을 미묘하게 변경하십시오 (사용자 이름 또는 랜덤 번호 등으로 만드십시오).

해시 (MD5 또는 SHA)를 시간에 기반으로하면 디렉토리가 생성 될 때 사용자가 대략적으로 알고 있다면 추측 할 수 있습니다. 그들이해야 할 일은 어느 쪽이든 몇 초 동안 다루는 모든 가능성을 생성하기 위해 간단한 스크립트를 설정 한 다음 응답을 찾기 위해 사이트를 치는 것입니다. 소금을 추가하는 것은 도움이되지만 장기적으로는 그리 좋지 않습니다.

OP에 위의 것은 모든 방법에 맞습니다. 매우 빠른 서버를 실행하는 경우 랜덤 디렉토리에 대한 적중을 모니터링해야합니다. 5 개의 글자 디렉토리 만 있으면 누군가가 디렉토리를 발견하기에 충분한 시간에 사이트를 수동으로 칠 수 있습니다. 15는 그것을 다소 증가 시키지만 몇 대의 기계가 스크립트를 사용하면 가능성이 없습니다.

C ++ 표준에는 CSTDIO (stdio.h)에 TMPFILE 및 TMPNUM 기능이 있으며 그에 따라 임시 파일과 임시 파일 이름을 만듭니다. TMPFile은 프로그램의 끝에서 삭제됩니다. 나는 그것들을 연결하지만 슬프게도 아직 링크를 게시 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top