Skip to content
garevna edited this page Jan 13, 2019 · 5 revisions

🎓 Secure Hash Algorithm

криптографический алгоритм компьютерной безопасности

Алгоритм генерирует криптографический хэш ( «дайджест» )

Этот хэш является своего рода «сигнатурой» для текста или файла данных

Алгоритм SHA не является «шифрованием»

⚠️ он не может быть расшифрован обратно к исходному тексту

это «односторонняя» криптографическая функция

она возвращает цифровую подпись фиксированного размера для любого размера исходного текста

Создан Агентством национальной безопасности США

  • SHA-0 - в 1993 году
  • SHA-1 - в 1995 году
  • SHA-2 - в 2002 году
является частью стандарта цифровой подписи ( DSS )

🎓 SHA-1

генерирует почти уникальную 160-битную ( 20-байтную ) подпись для текста

☕ Например, для исходного текста:

for ( var x of arr ) {
     console.log ( x )
}

криптографический хэш SHA-1 будет:

15E84BC669EC1F264F68CF0329A3DE12788EBC7D

а SHA-2 ( SHA256 ):

B731057D4688C1BCE4E6D7213027AA5F9E30939456B222E4FFF74FA0CD399D4F

git широко использует хэши SHA-1 в качестве идентификаторов и проверок согласованности


Онлайн-генераторы цифровой подписи SHA
🔗SHA1 🔗 SHA2

:octocat: js-sha1

Вы можете установить пакет js-sha1 из CDN

$ npm install js-sha1

SHA256

Вы можете подключить скрипт sha256 к своей странице:

<script src="https://cdn.rawgit.com/chrisveness/crypto/4e93a4d/sha256.js"></script>

и использовать функцию Sha256.hash() для динамической генерации дайджеста любого текста

var hash = Sha256.hash ( text )
☕ 1️⃣

Кроме того, в Bush вы можете использовать консольную команду sha256sum

sha256sum


SHA384

Откройте пустое окно ( blank )

В этом окне откройте Chrome DevTools

Создайте фрагмент кода ( snippet ), как показано на видео

Вставьте следующий код сниппета:

let script = document.createElement( 'script' )
script.src = 'https://garevna.github.io/js-samples/js/testSHA384.js'
script.crossOrigin = 'anonymous';
script.integrity = 'sha384-yXrIdlO1CBJknfDtCtDe2tmWWNl5xK30aTz62nLkEpEIBRD3OGi7+To7hfKRaUZ/'
document.head.appendChild( script )

🎓 integrity

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

Если файл был изменен, то значение атрибута integrity ( цифровой подписи файла ) не будет соответствовать новому значению, вычисленному браузером, и загрузка поврежденного файла не произойдет

Для генерации дайджестов файлов используйте 🔗 сервис

  • Вставьте ссылку на файл в сети
  • Нажмите кнопку Hash!
  • Полученный тег скрипта содержит атрибут integrity
  • Скопируйте значение атрибута integrity
  • Теперь вы сможете использовать его при динамической загрузке скриптов

💼 Самостоятельная работа

Посмотрите код примера в отладчике

Установите breakpoints

С помощью Watch отслеживайте, как изменяются значения массива users и переменной user

Задание:
  • Создайте форму регистрации пользователя
  • Создайте страницу для зарегистрированных пользователей

При регистрации пользователя должен генерироваться дайджест, который будет ключом записи в базе данных

users = [
    {
        key: a42caea01469a4687fb8713dc1748a0d14adec7f307371f82382812142ee2c58,
        name: "Иван",
        email: "ivan.petrenko@gmail.com",
        avatar: "https://imgur.com/I80W1Q0.png"
    },
    {
        key: b7d20c2dc6cb3e4bcde90f80598e369ab3d1841d799039dfd06f86221af10fd8,
        name: "Mary",
        email: "mary789@gmail.com",
        avatar: "https://raw.githubusercontent.com/fangpenlin/avataaars/HEAD/avataaars-example.png"
    },
    ...
]

Создайте форму для входа пользователя

После ввода email нужно найти пользователя с таким email и запросить пароль

После ввода пароля должен быть сгенерирован дайджест, который будет проверяться на совпадение со значением key найденного пользователя

Если значения не совпадут, нужно вывести предупреждение

Если значения совпали, то перейти на страницу для зарегистрированных пользователей

На странице для зарегистрированных пользователей должно быть выведено имя пользователя и его аватар

© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав


Новая версия


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally