1. 이론
일반 HTTP에서는 일반 형식의 비밀번호가 일반 텍스트로 서버에 전송되어 처리됩니다. 이는 의심할 여지없이 악당들에게 기회를 제공합니다! 여기서는 비밀번호를 안전하게 전송하는 방법에 대해 이야기하겠습니다!
비밀번호 자체를 전송하는 것보다 암호화된 형태로 전송하는 것이 좋습니다. MD5는 좋은 선택입니다. 첫째, 서로 다른 리소스가 동일한 MD5 다이제스트를 생성하는 것은 거의 불가능합니다. 둘째, MD5의 인코딩 방법은 되돌릴 수 없습니다. 이러한 기능을 사용하면 악의적인 행위자가 비밀번호를 알 수 있다는 걱정 없이 MD5 다이제스트를 인터넷에서 공개적으로 전송할 수 있습니다. 그런 다음 서버 측에서 동일한 방식으로 비밀번호를 암호화하고 마지막으로 두 문자열을 비교합니다.
그러나 로그인을 위해 인터넷을 통해 직접 비밀번호 md5를 전송할 수는 없습니다. 왜냐하면 악의적인 사람들이 우리의 비밀번호를 모르더라도 우리 웹사이트에 액세스할 수 있는 권한을 부여할 수 있는 이 특수 문자열은 확실히 알 것이기 때문입니다!
이것이 바로 공개키와 개인키가 해결해야 할 문제입니다. 먼저 서버가 임의의 문자열을 제공하고, 클라이언트가 임의의 문자열과 비밀번호를 추가한 후 암호화합니다!
로그인할 때마다 서버에서 다른 임의의 문자열을 생성하므로 비밀번호는 변경되지 않지만 위 방법으로 암호화된 MD5 다이제스트는 전혀 다릅니다. 이렇게 하면 악의적인 사람이 이러한 MD5 다이제스트를 얻더라도 귀하의 비밀번호를 분석할 수 없습니다!
이 방법에서는 서버에서 제공하는 임의의 문자열을 "공개 키"라고 하며, 수명이 짧고 누구나 사용할 수 있는 비밀번호를 "개인 키"라고 합니다. 사람들은 절대 사용하지 않을 것입니다.
2. 성취하다
클라이언트 측 Javascript는 기성 md5 알고리즘을 제공하지 않지만 Google에서 "md5 javascript"라고 검색하면 Javascript로 구현된 md5의 예를 많이 얻을 수 있습니다.
PHP에서는 더 말할 필요 없이 md5() 함수만 사용하면 됩니다! 세션을 사용하여 임의의 문자열을 저장할 수 있습니다. (PHP는 매우 강력합니다~~)
3. 알아채다
JS에서는 한자가 UTF-8 형식이므로 비밀번호가 중국어이고 서버에 저장된 비밀번호의 인코딩 방식이 GB2312라면 두 비밀번호의 암호화된 문자열이 완전히 다릅니다!
위에서는 http://www.12306.cn/mormhweb/의 내용을 포함하여 일반 HTTP를 통해 비밀번호를 안전하게 전송하기 위해 http://www.12306.cn/mormhweb/을 소개했습니다. PHP 튜토리얼에 관심이 있기를 바랍니다. 친구들이 도와줍니다.