Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 170

Алгоритм SHA-1

29.10.2014, 17:16. Показов 2180. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нужно написать код алгоритма шифрования SHA-1. Есть вот этот псевдокод, но я не могу разобраться с чего там начинать писать, так как не все есть. Спасибо.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Замечание: Все используемые переменные 32 бита.
 
Инициализация переменных:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
 
Предварительная обработка:
Присоединяем бит '1' к сообщению
Присоединяем k битов '0', где k наименьшее число ≥ 0 такое, что длина получившегося сообщения
(в битах) сравнима по модулю  512 с 448 (length mod 512 == 448)
Добавляем длину исходного сообщения (до предварительной обработки) как целое 64-битное
Big-endian число, в битах.
 
В процессе сообщение разбивается последовательно по 512 бит:
for перебираем все такие части
    разбиваем этот кусок на 16 частей, слов по 32-бита w[i], 0 <= i <= 15
 
    16 слов по 32-бита дополняются до 80 32-битовых слов:
    for i from 16 to 79
        w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) циклический сдвиг влево 1
 
    Инициализация хеш-значений этой части:
    a = h0
    b = h1
    c = h2
    d = h3
    e = h4
 
    Основной цикл:
    for i from 0 to 79
        if 0 ≤ i ≤ 19 then
            f = (b and c) or ((not b) and d)
            k = 0x5A827999
        else if 20 ≤ i ≤ 39 then
            f = b xor c xor d
            k = 0x6ED9EBA1
        else if 40 ≤ i ≤ 59 then
            f = (b and c) or (b and d) or (c and d)
            k = 0x8F1BBCDC
        else if 60 ≤ i ≤ 79 then
            f = b xor c xor d
            k = 0xCA62C1D6
 
        temp = (a leftrotate 5) + f + e + k + w[i]
        e = d
        d = c
        c = b leftrotate 30
        b = a
        a = temp
 
    Добавляем хеш-значение этой части к результату:
    h0 = h0 + a
    h1 = h1 + b 
    h2 = h2 + c
    h3 = h3 + d
    h4 = h4 + e
 
Итоговое хеш-значение:
digest = hash = h0 append h1 append h2 append h3 append h4
Этот псевдокод с википедии.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2014, 17:16
Ответы с готовыми решениями:

Предупреждение sha-1
Добрый день. Используя сборку OpenServer, делаю сайт на php. Начинаю его понемногу тестировать, и заметил в консоли следующие...

SHA-256 in PHP
Всем доброго времени суток! Помогите, пожалуйста, как мне декодировать результат SHA-256 Не надо мне кидать ссылки на то, что это не...

Алгоритм кодирования SHA-1
Кто работал с алгоритмом кодировки Sha-1 и имеет какие-то исходники?

11
 Аватар для Voka
207 / 199 / 110
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
29.10.2014, 17:46
Чем вам встроенная функция не нравится? - http://php.net/manual/ru/function.sha1.php
0
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 170
29.10.2014, 19:51  [ТС]
Voka, ну задание у меня такое - продемонстрировать SHA-1. А про встроенную ф-цию я знаю)

Добавлено через 2 часа 1 минуту
Кто-то сможет помочь?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.10.2014, 20:13
Вот рабочий пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
 /************************************** КРИПТОГРАФИЯ АЛГОРИТМ AES *******************************/
        /*
                                                       AES в использовании
                             Сначало хочется описать что представляют собой аргументы этих функций:
          
         * HashAlgorithm может быть SHA1 или MD5.
          
         * InitialVector должен быть строкой размерностью 16 ASCII символов.
          
         * KeySize может быть 128, 192, или 256.
          
         * The Salt выступает в роли второго ключа.
          
         * PasswordIterations сколько раз алгоритм выполнится над текстом.
          
         Использовать функции довольно просто. (Не забываем подключать необходимые сборки System.Security.Cryptography)
 
 
                 using System.Security.Cryptography;
         
                 зашифровать:
                 string FinalValue=Encrypt("Text", "Password1", "Password2", "SHA1", 2, "16CHARSLONG12345", 256);  
 
                 дешифровать:
                 string FinalValue=Decrypt("Text", "Password1", "Password2", "SHA1", 2, "16CHARSLONG12345", 256);   ******/
 
 
 
        /****************** ШИФРОВАНИЕ **************************/
        /// <summary> /// Encrypts a string /// </summary>
 ///Text to be encrypted
 ///Password to encrypt with
 ///Salt to encrypt with
 ///Can be either SHA1 or MD5
 ///Number of iterations to do
 ///Needs to be 16 ASCII characters long
 ///Can be 128, 192, or 256
 /// <returns>An encrypted string</returns>
   public static string Encrypt(string plainText, string password, string salt, string hashAlgorithm, int passwordIterations, string initialVector, int keySize)
   {
    if (string.IsNullOrEmpty(plainText))
    return "";
    byte[] initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
    byte[] saltValueBytes = Encoding.ASCII.GetBytes(salt);
    byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
    PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes (password, saltValueBytes, hashAlgorithm, passwordIterations);
    byte[] keyBytes = derivedPassword.GetBytes(keySize / 8);
    RijndaelManaged symmetricKey = new RijndaelManaged();
    symmetricKey.Mode = CipherMode.CBC;
    byte[] cipherTextBytes = null;
    using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes))
        {
         using (MemoryStream memStream = new MemoryStream())
             {
              using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
                  {
                   cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                   cryptoStream.FlushFinalBlock();
                   cipherTextBytes = memStream.ToArray();
                   memStream.Close();
                   cryptoStream.Close();
                  }
             }
        }
    symmetricKey.Clear();
    return Convert.ToBase64String(cipherTextBytes);
   }  /*********** КОНЕЦ ШИФРОВАНИЕ *******************/
 
 
      
        
        /****************** ДЕШИФРОВАНИЕ **************************/
 
        /// <summary> /// Decrypts a string /// </summary>
 ///Text to be decrypted
 ///Password to decrypt with
  ///Salt to decrypt with
 ///Can be either SHA1 or MD5
  ///Number of iterations to do
  ///Needs to be 16 ASCII characters long
  ///Can be 128, 192, or 256
  /// <returns>A decrypted string</returns>
   public static string Decrypt(string cipherText, string password, string salt, string hashAlgorithm , int passwordIterations, string initialVector,int keySize)
   {
    if (string.IsNullOrEmpty(cipherText))
    return "";
    byte[] initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
    byte[] saltValueBytes = Encoding.ASCII.GetBytes(salt);
    byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
    PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, passwordIterations);
    byte[] keyBytes = derivedPassword.GetBytes(keySize / 8);
    RijndaelManaged symmetricKey = new RijndaelManaged();
    symmetricKey.Mode = CipherMode.CBC;
    byte[] plainTextBytes = new byte[cipherTextBytes.Length];
    int byteCount = 0;
    using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes))
        {
        using (MemoryStream memStream = new MemoryStream(cipherTextBytes))
            {
            using (CryptoStream cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
                {
                 byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
                 memStream.Close();
                 cryptoStream.Close();
                }
            }
        }
    symmetricKey.Clear();
    return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);
    }/********* КОНЕЦ ДЕШИФРОВАНИЕ *****************/
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        /* Пример работы алгоритма шифрования AES */
   string pass1 = "hgh2g12121#$21gh323232fQ++po--";
   string pass2 = "Qe5$%eyf65r5r5ry)))9887+--";
   string metod = "SHA1";
   int pass_interation = 16;
   string initial_vector = "Qsd23Mkjk7898*hj";
   int keySize = 256;
 
   private void button3_Click(object sender, EventArgs e)
   {
       string stroka = textBox1.Text;
       string FinalValue = Encrypt(stroka, pass1, pass2, metod, pass_interation, initial_vector, keySize);
       textBox2.Text = FinalValue;
 
   }
 
   private void DeEncrypt_Click(object sender, EventArgs e)
   {
       string stroka = textBox2.Text;
       string FinalValue = Decrypt(stroka, pass1, pass2, metod, pass_interation, initial_vector, keySize);
       textBox3.Text = FinalValue;
   }
0
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 170
29.10.2014, 22:39  [ТС]
Prog_maker, спасибо) а подобного на пхп нету?
А зачем там что-то сказано про мд5?

Добавлено через 36 минут
Prog_maker, или можно рабочий проект с вашим кодом? а то там половины не хватает для работы

Добавлено через 27 минут
Может еще кто-то сможет помочь по этому вопросу?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.10.2014, 23:12
AES.rar
НА php к сожалению нету.
MD5 это метод шифрования - sha1 или MD5 как укажите в параметрах
0
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 170
29.10.2014, 23:17  [ТС]
Prog_maker, спасибо...так а там не идет реализация алгоритма sha-1 а только использование стандартных ф-ций c# или я не прав?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.10.2014, 23:22
Про отличие Sha1 и MD5 можно прочитать тут [http://www.in-nov.ru/files/Сра... %20MD5.doc
Так для ознакомления )
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.10.2014, 23:27
Сравнение SHA и MD5.docЧто-то ссылка не вставляется ))))
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.10.2014, 23:31
Это и есть реализация SHA1. Просто MD5 и SHA1 они очень похожи. Они используют разный размер дайджеста и размер итераций. А так они очень похожи
0
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 170
29.10.2014, 23:57  [ТС]
Prog_maker, мда, сложноватая реализация в вашей программе) не могу понять зачем там подключение к базе...что, для чего, и как...
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
30.10.2014, 15:26
В этом проекте была база. я его просто отчистил. База к алгоритму не имеет отношения. Просто что осталось видать )))

Добавлено через 1 минуту
Алгоритм реализован двумя функциями Encrypt и Decrypt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2014, 15:26
Помогаю со студенческими работами здесь

Алгоритм sha - 512
Пользователь вводит hash К примеру:...

как работает алгоритм sha-1
как работает алгоритм sha-1 можно ли объяснять код #include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #define kr 1000 union u{ ...

Реализация SHA-1
Доброго времени суток. Требуется реализовать алгоритм SHA-1, был выбран язык C#. Использовать встроенные классы нельзя. Сам алгоритм...

cryptoapi, SHA-1
char *str = new char; //данные HCRYPTPROV hCryptProv = 0; HCRYPTHASH hHash = 0; gets(str); DWORD count=strlen(str); ...

SHA-1 и кирилица
Доброго вечера! Есть какой-то скрипт-сервер, который обрабатывает get-запросы, если они проходят проверку с использование секретной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru