다음 질문에 대한 답변입니다.
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()
방법에 문제가있을 수 있습니다. 그 방법은 않을 경우 다음
- 사용
String.getBytes(...)
가 byte[]
로 문자열을 변환 할 수 있습니다.
- 바이트의 MD5 체크섬을 계산하여 다른
byte[]
을 제공합니다.
new String(byte[], ...)
을 사용하면 암호화 된 바이트를 String으로 변환 할 수 있습니다.
문제는 마지막 단계가 손실 가능성이 가장 높고 잘못되었습니다. 대부분의 문자 인코딩에는 유효한 문자에 매핑되지 않는 바이트 또는 바이트 시퀀스가 있습니다. String
생성자가 입력 바이트 배열에서이 중 하나를 발견하면이를 파기하거나 매핑 할 수없는 문자 (예 : '?')를 나타내는 일부 문자에 매핑합니다. 최종 결과는 체크섬이 올바르게 저장되지 않는다는 것입니다. 이 문제를 해결하려면 byte[]
형식의 체크섬을 데이터베이스에 blob로 저장하거나 16 진수 또는 16 진수로 인코딩해야합니다. 그것은 당신이 당신의 MD5.crypt 방법에 대한 소스 코드를 제공 ...하거나에서 제공하는 라이브러리라고 우리에게 이야기하면 당신의 질문을 이해하는데 도움이 될
.
두 번째 서식은 "L"로 시작합니다. 그것이 유효한 md5 문자입니까? – cherouvim
안녕하세요 cherouvim, 기본적으로 두 번째 형식은 암호 재설정 이벤트가 발생했을 때 데이터베이스에 저장 될 임의 생성 문자열입니다. – Anshul
왜 투표가 실패했는지 알려주세요. 게시물의 해당 부분을 개선 할 수 있도록 알려주세요. – Anshul