2016-09-09 7 views
0

나는 약간의 조사를했고 암호를 생성하는 모든 방법은 '무작위'부분을 포함하는 것 같습니다. 비밀 번호를 생성하고 무작위 부분없이 가능한 한 보안을 설정하여 스크립트를 생성 할 수있게하려면 어떻게해야합니까? (같은 결과로 반복해서)?PHP에서 임의의 암호를 생성하지 않는 가장 안전한 방법은 무엇입니까?

내 웹 사이트에 사용자 이름이 'foo_bar'인 사용자가 있다고 가정 해 보겠습니다.

hash('sha512', 'foo_bar'.'some_secret_word') 

과 같은 작업을 수행하는 것이 가장 좋은 방법 일 수 있습니까?

편집 :의 세부 문제를 보자 : 모든 랜드를 포함하는()는 답변

편집되지 않도록 내가 입력에 같은 문자열을 제공하는 동일한 암호를 생성하는 내 스크립트가 필요합니다. CSV 형식의 사용자 데이터 (사용자 이름, 전자 메일, 주소 등)의 긴 목록이 있습니다. 내 웹 사이트 (CMS를 기반으로)에서 가져와야합니다. 나는 그들을 가져오고, 사용자를 생성하는 방법을 안다. 그러나 나는 다른 시간에 사용자에게 자격 증명을 인쇄해야하기 때문에 언제든지 그들을보기 위해 자신의 PHP로 암호를 생성해야한다. 무작위 요소로 암호를 생성한다는 것은 언제든지 자격 증명을 가지고 인쇄 할 수 없다는 것을 의미합니다. 몇 가지 이유로, 나는 한 번 생성 할 수없고, 어딘가에 저장하고 나중에 확인 할 수 없습니다. 분명히, 나는 password = 'username_astring'과 같은 간단한 방법으로 암호를 생성 할 수 없다. 왜냐하면 자신의 암호를보고있는 사용자는 다른 사람의 암호를 알 수 있기 때문에이 방법을 사용하는 것이 좋다고 생각했지만 문자열을 암호화했다. 그러나이 생각은 나에게는별로 '깨끗하지 않은 것 같습니다. 그리고 더 표준적이고 깨끗한 해결책이 있다면 추측하고있었습니다.

+5

랜덤 비트 (소금)는 해시를 안전하게 만드는 요소 중 하나입니다. [비밀번호 API] (http://php.net/password)를 사용하여 비밀번호 워크 플로우를 롤에 옮기지 마십시오. –

+0

"안전"이란 무엇을 의미합니까? – Scott

+1

암호를 생성하거나 해시를 생성하려고합니까? 분명하지 않아. – Machavity

답변

1

비밀번호는 salting입니다. 사용자의 암호에 해싱 알고리즘을 적용하기 전에 별도의 문자열이 추가되기 전에 올바른 생각입니다. 이를 보호하기위한 의미는 rainbow tables이며 공격자는 공통 암호 해시를 미리 계산하고 해시 된 암호와 비교하여 '획득 한'데이터베이스 덤프와 비교합니다.

이 경우 가장 좋은 방법은 not roll your own hashing algorithm입니다. 저기 타사 해싱 라이브러리가 많이있어 시도하고 테스트하고 입증 된 안전합니다.

각 암호가 (암호 변경 포함) 인 다른 소금을 생성하는 것이 가장 좋습니다. 암호 변경과 함께 암호를 저장해야 인증 시도를 확인할 수 있습니다.

+0

OP는 그의 질문을 분명히했습니다. 소금으로 가역 암호를 원합니다. 해쉬에 좋은 대답, tho – Machavity

+0

언제나 소금을 바꾸는 것에 대한 제안에 감사드립니다. 정말 귀중한 것입니다! –

관련 문제