# Калькулятор полей посетителя

На этой странице размещён калькулятор [полей посетителя](https://webim.ru/kb/dev/identification/visitor-ids.html), где вы можете рассчитать контрольную сумму (хэш) для указанных вами полей по одному из алгоритмов:

  * `hmac-sha512`

  * `hmac-sha256`

  * `sha256`

  * `sha512`

!!! Note "N.B."
    Подробнее о вычислении контрольной суммы, а также об идентификации авторизованных клиентов вы можете узнать [здесь](https://webim.ru/kb/dev/identification/id-2-0.html).

---

<link rel="stylesheet" href="/kb/stylesheets/calculator.css">
<script src="/kb/js/cryptojs.js"></script>
  <script>
  function hashGet(message, key, hashType) {
    var rawHash;
    var result;
    var input = message + key;

    if (hashType === "sha256") {
      rawHash = CryptoJS.SHA256(input);
      result = rawHash.toString(CryptoJS.enc.Hex);
    }
    else if (hashType === "hmac-sha256") {
      rawHash = CryptoJS.HmacSHA256(message, key);
      result = rawHash.toString(CryptoJS.enc.Hex);
    }
    else if (hashType === "hmac-sha512") {
      rawHash = CryptoJS.HmacSHA512(message, key);
      result = rawHash.toString(CryptoJS.enc.Hex);
    }
    else if (hashType === "sha512") {
      rawHash = CryptoJS.SHA512(input);
      result = rawHash.toString(CryptoJS.enc.Hex);
    }
    return result;
  }
  </script>

  <select id="algorithm">
      <option value="">Выберите алгоритм</option>
      <option>hmac-sha512</option>
      <option>hmac-sha256</option>
      <option>sha256</option>
      <option>sha512</option>
  </select><br>

  <div id="calculator">
    <div id="calculatorFields">
      <form name="fields">
        <textarea rows="1" name="key" placeholder="Приватный ключ"></textarea><br>
        <textarea rows="1" name="id" placeholder="ID"></textarea><br>
        <textarea rows="1" name="display_name" placeholder="Имя"></textarea><br>
        <textarea rows="1" name="phone" placeholder="Телефон"></textarea><br>
        <textarea rows="1" name="email" placeholder="Email"></textarea><br>
        <textarea rows="1" name="first_custom_field" placeholder="Произвольное поле"></textarea><br>
        <textarea rows="1" name="second_custom_field" placeholder="Произвольное поле"></textarea><br>
        <textarea rows="1" name="third_custom_field" placeholder="Произвольное поле"></textarea><br>
        <textarea rows="1" name="expiring" placeholder="Expiring period (в секундах)"></textarea><br>
        <input type="button" name="calculate" value="Рассчитать хэш">
        <input type="button" name="clipboard" value="Сохранить в буфер обмена">
        <input type="reset" name="clear" value="Сбросить">
      </form>
    </div><br>
    <div id="resultBlock"></div>
  </div>
  <script>
    var algorithmSelectBox = document.getElementById("algorithm");
    var algorithmValue;

    function onchange(e) {
      algorithmValue = this.value;
    }

    algorithmSelectBox.addEventListener("change", onchange);
  </script>
  <script>
    var privateKeyValue;
    var keyBox = document.fields.key;

    function onchange(e) {
      var resultBlock = document.getElementById("resultBlock");
      privateKeyValue = e.target.value;
    }

    keyBox.addEventListener("change", onchange);
  </script>
  <script>
    var visitorFields = {
      id: '',
      display_name: '',
      phone: '',
      email: '',
      first_custom_field: '',
      second_custom_field: '',
      third_custom_field: '',
      expiring: ''
    };

    function onchange(e){
      var resultBlock = document.getElementById("resultBlock");
      visitorFields[e.target.name] = e.target.value;
    }

    var fields = document.forms['fields'].elements;
    for (var i = 0; i < fields.length; i++) {
      if (fields[i].type === 'textarea' && fields[i].name !== 'key') {
        fields[i].addEventListener("change", onchange);
      }
    }
  </script>
  <script>
    var calculateBox = document.fields.calculate;

    function onclick(e){
      var resultBlock = document.getElementById("resultBlock");
      var message = visitorFields.display_name + visitorFields.email + visitorFields.first_custom_field + visitorFields.id + visitorFields.phone + visitorFields.second_custom_field + visitorFields.third_custom_field + visitorFields.expiring;
      var result = hashGet(message, privateKeyValue, algorithmValue);
      resultBlock.textContent = result;
    }

    calculateBox.addEventListener("click", onclick);
  </script>
  <script>
    var clipboardBox = document.fields.clipboard;

    function onclick(e){
      navigator.clipboard.writeText(resultBlock.textContent).then(() => {
        alert("Результат сохранён в буфере обмена");
      })
      .catch(err => {
        alert("Ошибка при сохранении в буфер обмена", err);
        });
    }

    clipboardBox.addEventListener("click", onclick);
  </script>
  <script>
    var resetBox = document.fields.clear;

    function onclick(e){
      document.getElementById("resultBlock").innerHTML = "";
      privateKeyValue = "";
      visitorFields = {
        id: '',
        display_name: '',
        phone: '',
        email: '',
        first_custom_field: '',
        second_custom_field: '',
        third_custom_field: '',
        expiring: ''
      };
      algorithmValue = "";
    }

    resetBox.addEventListener("click", onclick);
  </script>

Инструкция по использованию калькулятора:

  1. Чтобы выбрать алгоритм шифрования, откройте выпадающее меню **Выберите алгоритм** и кликните на нужный вам алгоритм. Ваш выбор отобразится вместо надписи **Выберите алгоритм**.

  1. В поле **Приватный ключ** укажите (или скопируйте в поле) используемый вами приватный ключ.

  1. Введите значения в поля **ID**, **Имя**, **Телефон**, **Email**, три дополнительных поля и поле **Expiring period**.

  1. После выбора алгоритма хэширования и заполнения всех полей нажмите кнопку **Рассчитать хэш**. Результат вычисления хэша отобразится в поле ниже. Для очистки полей нажмите кнопку **Сбросить**. Для сохранения результата в буфер обмена нажмите кнопку **Сохранить в буфер обмена**.

---

Источник: https://webim.ru/kb/dev/identification/visitor-fields-calculator.html
