2009-09-25 3 views
1

암호 텍스트 상자의 유효성을 검사하려고하는 다음과 같은 논리를 가진 기존 응용 프로그램을 현지화하려고합니다. 사용자가 텍스트 상자에 입력 할 수있는 특수 문자가있는 언어에서는이 기능이 작동하지 않는다고 가정합니다. 나 맞아? 사용자가 영어 이외의 문자 (아랍어, 중국어 등)를 입력하지 못하도록 제한하고 싶다고 생각하지 않습니다. 또는, 내가 이해하지 못하는 것이 있습니까?C#에서 암호 유효성 검사를 어떻게 현지화합니까?

Regex ValidHex = 
    new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase); 
if (!ValidHex.IsMatch(e.Text)) 
{ 
    e.Handled = true; 
} 

답변

8
당신은 유니 코드 문자를 지원하기 위해 다음과 같이 할 수

: 보조 노트로

[\p{L}\p{N}_-]+ 

: 당신이 허용되는 문자를 제한해야하는 특별한 이유가 있습니까?

+1

보안을 위해 이상한 코드를 추가하고 싶다면 왜 그렇게하지 않으십니까? –

+0

동의; 사용자를 위해 암호의 특정 문자 조합을 제한 (또는 요구할 필요가있는)하는 절대적 이유가 없습니다. –

6

비밀번호를 저장하지 마십시오.

cryptographic hashing function을 사용하여 암호를 해시하고 비교하십시오.

+1

이 유형의 응답을 싫어하는만큼 벤의 말이 맞습니다. – JoeB

+9

@Ben S : 여기서 비밀번호 저장 공간에 대해 언급 했습니까? –

+1

일반적으로 좋은 조언뿐만 아니라 질문에 완전히 직각으로 물었다. 그는 암호를 저장하고 있다고 말하지 않았으며 코드 스 니펫이 자신이 암호라고 암시하지도 않았습니다. –

0

A-za-z 대신 \ w를 사용해 보셨습니까? 현지화 문제를 해결할 수 있을지에 대해 저는 확신합니다.

1

정규 표현식이 특히 좋은 것은 아니며 사용자 옵션을 제한하며 아무 것도 적용하지 않습니다 ('a'및 'aaaaaaa'암호가 전달됩니다). 이름은 16 진수를 검증 한 표현식에서 채택되었음을 나타냅니다. 최소 길이 조건 (reg ex 또는 e.Text.Length> 8)을 최소한 추가해야합니다.

좀 더 합리적인 표현은 적어도 하나의 char 형태로 여러 그룹이 사용되었다는 것을 검증 할 것이고, 나는 이것을 위로 팠다 : @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)"See here. 다시 최소 길이 검사를 추가하십시오.

이 예제는 현지화 문제를 해결하지 않으며, '라틴 문자가 아닌'문자 만 허용합니다. [a-z] 또는 [A-Z] 요구 사항을 만족하는 것은 고려하지 않습니다.

관련 문제