2013-11-14 3 views
4

새 레코드의 암호가 비어 있지 않은 것이 하나의 빈 공간이었습니다. 그래서 가장 먼저 생각한 것은 Trim()에 암호를로드하거나 저장하는 곳을 호출하는 것이므로 더 이상 빈 공간 문제가 발생하지 않습니다. 하지만 할 일이 잘못되었는지 아닌지에 대한 의견을 듣고 싶었습니다.비밀번호 자르기가 잘못 되었습니까?

+1

가 어떻게 트림 경우 자신의 암호를 알고 가정 사용자 그의 그가 의도적으로 거기에 넣은 결말 공간? –

+2

사람들은 처음 또는 끝 부분에 공백이있는 암호를 가지고 있으므로 트리밍 할 필요가 없으며 계획 텍스트에 암호도 저장하지 마십시오. – Habib

+0

재개를 위해 투표합니다. OP가 의견을 물을지라도,이 질문은 실제로 모범 사례에 관한 것입니다. –

답변

12

암호를 일반 텍스트로 저장하면 안됩니다.

+2

이 작업을 정교하게 수행하려면 PBKDF2, bcrypt 또는 scrypt (소금 포함)를 적당한 작업량으로 사용하십시오. 그렇다면이 같은 "문제"가 없을 것입니다. – Kitsune

+4

사실,하지만 질문에 대답하지 않습니다. –

+4

댓글이어야합니다. –

1

공백은 암호의 유효한 문자입니다. 그래서 그것을 자르면 안됩니다.

암호 저장을 위해 'String'클래스 대신 SecureString을 사용해야합니다.

+0

Google은 암호를 삭제합니다 ... 잘못 되었든 아니든 – DarkWanderer

+0

동의하지만 널리 사용되는 표준은 아닙니다. 비밀 번호가 아닌 공간에 의존 할 수는 없습니다.일부 인증 시스템에서는이를 허용하지만 일부는 허용하지 않습니다. http://stackoverflow.com/questions/5475071/should-whitespace-characters-be-allowed-in-a-password – Tilak

3

저장되는 암호가 입력 한 암호와 다른 것을 사용자에게 알리지 않기 때문에 잘못된 것입니다. String.IsNullOrWhiteSpace을 사용하여 서버 쪽 검사를 수행 할 수 있으며 다른 대답은 일반 텍스트로 저장해서는 안됩니다.

1

암호 유효성 검사에 최소 글자 수 제한이나 유효성 검사를 지정하고 자르지 않는 것이 좋습니다.

2

어쨌든 짧은 암호는 허용하지 않는 것이 좋습니다.

또한 내 경험에 의하면 & 암호 뒤에 오는 공백은 거의 항상 사용자가 의도하지 않습니다. 그러나 암호 입력을 두 번해야하는 경우 사용자가 실수로 의도 한 암호를 두 번 입력하지 않을 것입니다. 단, 잘라 내기/붙여 넣기를 사용하지 않는 한 실수로이 암호를 두 번 입력 할 가능성은 없습니다. 그러나 이것은 일반적인 관행이기 때문에, 나는 항상 패스워드에서 선행/후행 공백을 다듬습니다. 내부 공백을 유지해야합니다.

이 다른 트리밍 나쁜 말을 읽었 데 ADDED 나는 아직도 그들이 잘못 말한다. 언제나 항상 패드를 다듬어 사용하면 패스워드가 항상 작동합니다 - 저장된 패스워드가 정확히 일치하지 않는다는 것을 알지 못합니다 - 물론 단방향 해쉬 인 "패스워드"는 절대로 저장해서는 안됩니다 그 결과 암호가 어쨌든 정확한 해시 값에 해싱되는지 여부를 알 수있는 방법을 실제로 알고 있습니다.

1

올바른 동작 (적어도 모범 사례 중 하나 이상)은 암호를 암호화 한 다음 해시를 시도하는 것입니다. 가장 단순한 암호조차도 간단한 공백이라도 암호화하면 비 공백 문자열이 생성됩니다.

public static string Hash(this string text) 
{ 
    HashAlgorithm algorithm = algorithm = MD5.Create(); ; 
    // Adding something (salt) to text to make it harder to guess 
    text += "some-salt"; 
    //return algorithm.ComputeHash(text.ToBytes()).GetString().ToBase64(); 
    return Encoding.UTF8.GetString(algorithm.ComputeHash(Encoding.UTF8.GetBytes(text))); 
} 

전화 공백에이 기능을, 그 결과는 다음과 같습니다 :

여기에 있다고 할 수있는 간단한 코드입니다

var result = " ".Hash(); 
// Xd�m���SJ�l|r�Z*