Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.Раб. МИРЭА 1915.doc
Скачиваний:
173
Добавлен:
10.05.2015
Размер:
2.02 Mб
Скачать

Генерирование открытого и секретного ключей

Еще одним элементом ввода, предлагаемым стандартом HTML 5 и визуально похожим на выпадающий список, является <keygen />. Это поле предназначено для генерирования пары открытого и секретного ключей, применяемых в технологии асимметричного шифрования, в которой открытый ключ используется для проверки ЭЦП и шифрования сообщений, а секретный — для генерации ЭЦП и расшифрования сообщений. Элемент представляет собой список, в котором пользователю предлагается выбрать подходящую длину ключа. После отправки формы, в хранилище браузера сохраняется секретный ключ, а на сервер передается упакованный открытый. <keygen /> поддерживает стандартный для элементов ввода атрибут name, а также атрибуты keytype и challenge. Первый из них определяет алгоритм ассиметричного шифрования, однако стандарт HTML 5 не обязует браузеры поддерживать какой-либо алгоритм вообще, поэтому список допустимых значений не фиксирован. Если значение не известно браузеру, то он откажется генерировать пару ключей. Если keytype не указан вообще, то используется криптографический алгоритм RSA. Значение атрибута challenge, если он указан, упаковывается вместе с открытым ключом для отправки на сервер.

<form action="processkey.cgi" method="post">

<keygen name="key" keytype="rsa" />

<input type="submit" value="Отправить ключ" />

</form>

Стандарт HTML 5 не определяет способы использования полученных ключей. Возможна, например, реализация механизма, при котором сервер, получив открытый ключ, сгенерирует пользовательский сертификат и предложит его сохранить вместе с секретным ключом в хранилище ключей браузера. А пользователь при необходимости сможет использовать его для авторизации на сервере.

Другие элементы форм

В HTML 5 появился элемент <output>, имя и значение которого также передаются на сервер при отправке формы. Однако он не является элементом ввода и предназначен для хранения и отображения каких-либо результатов вычислений. Например, с помощью JavaScript можно организовать подсчет по формуле, переменные которой вводятся в других полях формы. Кроме атрибута name, привычно содержащего имя передаваемого на сервер поля, <output> поддерживает также атрибут for, в котором можно указать один или несколько идентификаторов элементов, так или иначе связанных с отображаемым результатом. Сам результат содержится внутри элемента.

<form onsubmit="return false">

<input name="a" type="number" step="any" /> +

<input name="b" type="number" step="any" /> =

<output onforminput="value = a.valueAsNumber + b.valueAsNumber"></output>

</form>

Еще одним элементом, который привязывается к другим, является <label>. В отличие от <output>, он не поддерживает атрибут name, а его значение не отправляется на сервер. Кроме того, в атрибуте forможет быть указан только один идентификатор привязываемого поля ввода. Если for вообще отсутствует, то <label> привязывается к своему же содержимому. Такая привязка, помимо очевидного лексического смысла, обладает одним полезным свойством — если, например, <label> связан с полем <input type="checkbox" />, то флажок будет менять свое значение не только при нажатии по нему, но и по этому <label>.

Разместив несколько элементов внутри одного <fieldset>, можно таким образом лексически объединить их в одну группу. Визуально <fieldset> выглядит как рамка, в левом верхнем углу которой пишется заголовок. Его можно указать в элементе <legend>, располагаемым сразу за открывающим тегом <fieldset>. Несмотря на то, что этот элемент не влияет на отправляемые на сервер данные, он все же поддерживает атрибут name.

<form action="script.cgi" method="post">

<fieldset>

<legend>Пол</legend>

<label for="male">Мужской</label>

<input type="radio" name="sex" id="male" />

<br />

<label for="female">Женский</label>

<input type="radio" name="sex" id="female" />

</fieldset>

</form>