2012-07-23 2 views
2

너희들에 대한 빠른 질문이 있습니다는 PHP의 토굴을 사용하여() 함수

나는 (I 상대적으로 경험이 오전) PHP 땜질하고, 그리고에서 사용하기 위해 보안 암호 해시 시스템을 개발에 관심 내 사이트. 그래서 다른 기사와 질문을 통해 나는 BSD의 bcrypt 해싱 알고리즘을 구현하기 위해 PHP의 crypt() 함수를 사용해야한다고 추측했다.

제 질문은 함수에 초기화 벡터 나 암호를 입력 할 때 base64가 아닌 입력이 "0"을 해시로 반환하는 것처럼 보입니다. 여기에 내가이 문제를 해결하기 위해 구현 한 것입니다 :

$salt = base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)); 

$password = base64_encode($password); 

충돌의 위험이 있습니다 또는 나는이 같은 인코딩을 변경하면 다른 보안을 감소?

내 해쉬 함수가 빈 해시를 반환하는 것을 걱정할 필요없이 사용자가 암호에 대해 모든 문자를 사용할 수있게하려는 생각이 들었다.

더 간단하고 우아한 방법이 있습니까? 소금과 패스워드를 제한하지 않는 해쉬 함수를 사용해야할까요?

미리 도움을 주셔서 감사합니다.

+1

항상 'reversible'이며 보안상의 차이는 없으므로 'base64_encode'를 사용해서는 안됩니다. [base64] (http://en.wikipedia.org/wiki/Base64)를 사용하면 바이너리를 문자열로 표현할 수 있습니다. –

+0

이 [Portable PHP password hashing framework] (http://www.openwall.com/phpass/) 사용 방법은 어떻습니까? –

+0

"함수에 초기화 벡터 나 암호를 입력하면 base64가 아닌 입력이"0 "을 해시로 반환하는 것처럼 보입니다."... 무엇? –

답변

1

base64로 인코딩해도 단순히 1 대 1로 번역되므로 충돌 가능성이 증가하지 않습니다. 그것은 건초 더미 암호를 감소시키지 않습니다.

+0

우수합니다, 확실히 내 질문에 대한 답변. 이제 해시에 사용하는 방법을 변경해야 하는지를 알아 내야합니다. 빠른 답변 감사합니다. :) – NCourts

0

PHP에서 해시를 수행하려면 hash 기능을 사용하는 것이 좋습니다. 그것은 알고리즘을 사용하므로 sha 또는 다른 것을 통해 던질 수 있습니다.

충돌에 대해서는 걱정하지 않으므로 충돌로 인해 영향을받을 가능성은 거의 없습니다.

+0

'crypt()'를 사용할 때 본질적으로 잘못된 점이 있습니까? 나는 확실히 다른 메소드를 사용하고 있지만, 대신'hash()'를 사용할 이유가 있습니까? 그냥 평범한가요? – NCourts

+0

일반적으로 더 쉽습니다. crypt는 더 일반적이기 때문에 암호화가 더 복잡합니다. 해시는 물론 암호화도 허용합니다. 암호화는 해싱이 아닙니다. – Aatch

+0

알았어요. 나는 분명히'hash()'를 가지고 놀아서 더 쉬운 일을하는지 알아볼 것이다. 나는 숨어있는 모든 것이 끝난 후에 두 가지 용어의 차이점을 잘 알고 있습니다. 팁 고마워! – NCourts