2011-10-17 4 views
-1

나는 그 안에 입력 문자열을 인코딩하고 내 데이터 값 (인코딩 된 형식으로 저장 됨)을 사용하여 값을 확인합니다.문자열이 인코딩 된 형식인지 여부를 확인하는 방법

public void checkString(String strPass){ 
String s = MD5.crypt(strPass); 

code to check the string s with the data base value.. 

} 

가 나는 1. 관리자 2 L4989C의 형태가 될 수 strPass의 string.Data를 인코딩하는 방법에 전달하기 전에 'strPass'의 값을 확인하는 방법이 필요

제발 도와주세요.

+0

두 번째 서식은 "L"로 시작합니다. 그것이 유효한 md5 문자입니까? – cherouvim

+0

안녕하세요 cherouvim, 기본적으로 두 번째 형식은 암호 재설정 이벤트가 발생했을 때 데이터베이스에 저장 될 임의 생성 문자열입니다. – Anshul

+0

왜 투표가 실패했는지 알려주세요. 게시물의 해당 부분을 개선 할 수 있도록 알려주세요. – Anshul

답변

1

~ :

  1. 해시하려는 문자열을 MD5로 해시합니다.
  2. 해시를 16 진수 문자열로 표현하십시오.
  3. str1.equals(str2) 해시가 동일한 지 확인하십시오.
0

다음 질문에 대한 답변입니다.

public void checkString(String strPass) { 
    if (strPass.equals("admin") || strPass.equals("L4989C")) { 
     // do something else 
    } else { 
     String s = MD5.crypt(strPass); 
     // code to check the string s with the data base value. 
} 

그러나 MD5.crypt() 방법에 문제가있을 수 있습니다. 그 방법은 않을 경우 다음

  1. 사용 String.getBytes(...)byte[]로 문자열을 변환 할 수 있습니다.
  2. 바이트의 MD5 체크섬을 계산하여 다른 byte[]을 제공합니다.
  3. new String(byte[], ...)을 사용하면 암호화 된 바이트를 String으로 변환 할 수 있습니다.

문제는 마지막 단계가 손실 가능성이 가장 높고 잘못되었습니다. 대부분의 문자 인코딩에는 유효한 문자에 매핑되지 않는 바이트 또는 바이트 시퀀스가 ​​있습니다. String 생성자가 입력 바이트 배열에서이 중 하나를 발견하면이를 파기하거나 매핑 할 수없는 문자 (예 : '?')를 나타내는 일부 문자에 매핑합니다. 최종 결과는 체크섬이 올바르게 저장되지 않는다는 것입니다. 이 문제를 해결하려면 byte[] 형식의 체크섬을 데이터베이스에 blob로 저장하거나 16 진수 또는 16 진수로 인코딩해야합니다. 그것은 당신이 당신의 MD5.crypt 방법에 대한 소스 코드를 제공 ...하거나에서 제공하는 라이브러리라고 우리에게 이야기하면 당신의 질문을 이해하는데 도움이 될


.

관련 문제