Я уже могу использовать, MD5 закодировал пароль в Дайджест-аутентификации

Компиляция C++

компиляция А в C++ сделана в 2 главных фазах:

  1. первой является компиляция "исходных" текстовых файлов в двоичные "объектные" файлы: файл CPP является скомпилированным файлом и компилируется без любого ведома о других файлах CPP (или даже библиотеки), если не питается к нему через необработанное объявление или включение заголовка. Файл CPP обычно компилируется в.OBJ или файл "объекта".O.

  2. вторым является соединение вместе всех "объектных" файлов, и таким образом, создание заключительного двоичного файла (или библиотека или исполняемый файл).

, Где HPP помещается в весь этот процесс?

А плохой одинокий файл CPP...

компиляция каждого файла CPP независима из всех других файлов CPP, что означает это, если A.CPP нужен символ, определенный в B.CPP, как:

// A.CPP
void doSomething()
{
   doSomethingElse(); // Defined in B.CPP
}

// B.CPP
void doSomethingElse()
{
   // Etc.
}

Это не скомпилирует, потому что A.CPP не имеет никакого способа знать, что "doSomethingElse" существует... Если нет объявление в A.CPP, как:

// A.CPP
void doSomethingElse() ; // From B.CPP

void doSomething()
{
   doSomethingElse() ; // Defined in B.CPP
}

Затем если у Вас есть C.CPP, который использует тот же символ, Вы тогда скопировать/вставить объявление...

СКОПИРОВАТЬ/ВСТАВИТЬ ПРЕДУПРЕЖДЕНИЕ!

Да, существует проблема. Копия/вставки является опасной, и трудной поддержать. Что означает, что было бы здорово, если бы у нас был некоторый путь к НЕ скопировать/вставить, и все еще объявите символ... Как мы можем сделать это? Тем, чтобы включать некоторого текстового файла, который обычно снабжается суффиксом.h, .hxx.h ++ или, мое предпочтительное для файлов C++, .hpp:

// B.HPP (here, we decided to declare every symbol defined in B.CPP)
void doSomethingElse() ;

// A.CPP
#include "B.HPP"

void doSomething()
{
   doSomethingElse() ; // Defined in B.CPP
}

// B.CPP
#include "B.HPP"

void doSomethingElse()
{
   // Etc.
}

// C.CPP
#include "B.HPP"

void doSomethingAgain()
{
   doSomethingElse() ; // Defined in B.CPP
}

, Как делает include работа?

Включая файл, в сущности, проанализирует и затем вставка копии его содержание в файле CPP.

, Например, в следующем коде, с заголовком A.HPP:

// A.HPP
void someFunction();
void someOtherFunction();

... источник B.CPP:

// B.CPP
#include "A.HPP"

void doSomething()
{
   // Etc.
}

... станет после включения:

// B.CPP
void someFunction();
void someOtherFunction();

void doSomething()
{
   // Etc.
}

Одна мелочь - почему включают B.HPP в B.CPP?

В текущем случае, это не нужно, и B.HPP имеет doSomethingElse объявление функции, и B.CPP имеет doSomethingElse функциональное определение (который является, отдельно объявление). Но в более общем случае, где B.HPP используется для объявлений (и встроенный код), не могло быть никакого соответствующего определения (например, перечисления, простые структуры, и т.д.), таким образом, включать могло быть необходимо, если B.CPP использует тех объявление от B.HPP. В целом, это - "хороший вкус" к источнику для включения по умолчанию его заголовка.

Заключение

заголовочный файл таким образом необходим, потому что компилятор C++ неспособен искать одни только объявления символа, и таким образом, необходимо помочь ему включением тех объявлений.

Одно последнее слово: необходимо поместить защиту заголовка вокруг содержания файлов HPP, чтобы быть уверенными, что несколько включений ничего не повредят, но в целом, я полагаю, что главная причина для существования файлов HPP объяснена выше.

#ifndef B_HPP_
#define B_HPP_

// The declarations in the B.hpp file

#endif // B_HPP_
6
задан 10 August 2009 в 21:22
поделиться

4 ответа

Нет. Если нужный им хеш сгенерирован следующим образом:

MD5 (имя пользователя + область + пароль)

Вам не повезло.

Если они хешируют пароль следующим образом:

MD5 (MD5 (пароль ) + имя пользователя + область)

Это можно сделать с помощью только хешированного пароля. Но похоже, что это не так.

5
ответ дан 8 December 2019 в 18:39
поделиться

Нет, вы должны хранить в таблицах хэш HA1 Digest и использовать его для других типов аутентификации (форм и Basic). См. Здесь: Хранение пароля в таблицах и дайджест-проверка подлинности

5
ответ дан 8 December 2019 в 18:39
поделиться

Нет, это невозможно. Вся суть дайджест-аутентификации состоит в том, чтобы избежать атак повторного воспроизведения, т.е. если у кого-то есть только хешированная версия (некоторых аутентификационных данных), а не реальные данные.

Это не только хэш имени пользователя, настоящего и пароля в виде открытого текста, но также одноразовый номер, который будет меняться каждый раз. Так что вам действительно нужен пароль в виде открытого текста.

3
ответ дан 8 December 2019 в 18:39
поделиться

Нет. При дайджест-аутентификации пароль хешируется с вызовом, невозможно заставить его работать с другим хешем.

Обычная аутентификация по HTTPS более безопасна, и она должна работать с вашим хешированным паролем.

0
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: