С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378

Шифрование методом Эль-Гамаля

05.01.2019, 20:55. Показов 4130. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток) Нужно в один из проектов встроить шифрование методом Эль-Гамаля. Нашёл нужный код на GitHab, но из-за слабого знания JS не как не могу его подключить. Подскажите как это сделать???
Заранее всем спасибо)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2019, 20:55
Ответы с готовыми решениями:

Шифрование методом перестановки
Пожалуйста помогите.Мне надо выполнить шифрование текста более 80 символов методом перестановки с ключевым словом, в качестве ключевого...

Шифрование текста методом Эль Гамаля
Нет у кого нибудь случайно исходника на Delphi шифрования и дешифрования текстового файла методом одиночной перестановки Эль Гамаля. В коде...

Шифрование Эль Гамаля
Может кто нибудь помочь, я плохо разбираюсь в коде, моей знакомой надо код шифрование, чтоб по предмету получить оценку, методом одиночной...

18
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
05.01.2019, 22:27
Примерно так:
JavaScript
1
<script src="https://site.ru/js/file.js" type="text/javascript"></script>
После того, как браузер дойдет до этой строчки при обработке кода страницы, он пошлет GET-запрос на site.ru в каталог js к файлу file.js. После того, как этот файл придет к браузеру, он сразу начнет выполняться.
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
06.01.2019, 20:51  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
он сразу начнет выполняться.
Попробовал так. Плюс ещё добавил код из файла README.md:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="elgamal.js" type="text/javascript"></script>
</head>
<body>
    <script>
        import ElGamal from 'elgamal';
 
const eg = await ElGamal.generateAsync(); // Recommended way of initialization
const egCustom = new ElGamal(prime, generator, publicKey, privateKey);
        
        const secret = 'The quick brown fox jumps over the lazy dog';
const encrypted = await eg.encryptAsync(secret);
const decrypted = await eg.decryptAsync(encrypted);
 
console.log(decrypted.toString() === secret); // true
    </script>
</body>
</html>
В итоге браузер выдаёт ошибку:
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
06.01.2019, 21:03
Jasta, <script type="module"> надо.

Добавлено через 1 минуту
Походу README.md вообще кривой. Ошибки в двух местах.
1
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
07.01.2019, 16:57  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
Jasta, <script type="module"> надо.
Ok прописал, теперь ошибка сместилась на одну строчку вниз:

Цитата Сообщение от amr-now Посмотреть сообщение
Ошибки в двух местах.
А можете сказать где именно, дабы сэкономить нам время
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
07.01.2019, 17:22
В вопросе речь идет о клиентском (браузерном) JS. А
Цитата Сообщение от amr-now Посмотреть сообщение
<script type="module">
- здесь речь идет о СЕРВЕРНОМ JS (если я неправ, поправьте).
https://learn.javascript.ru/mo... akoe-modul
Серверный скрипт выполняется не браузером (из кода html), а сервером, например, при помощи Node.js или т.п.

А чтобы запустить серверный JS, вначале надо установить там соответствующую оболочку.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
07.01.2019, 17:25
Htext, там можно допилить до браузерного.
Jasta, Вы кстати как скачали, что у вас ошибки не появилось?

Там же вроде много файлов надо скачать. И их допиливать для браузера надо.
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
08.01.2019, 00:55  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
при помощи Node.js или т.п.
Установил node.js и пробовал запустить через него файл index.js в папке example в ответ в консоли получил следующие:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS E:\elgamal.js-master\example> node index
E:\elgamal.js-master\example\index.js:1
(function (exports, require, module, __filename, __dirname) { import { BigInteger as BigInt } from 'jsbn';
                                                                     ^
SyntaxError: Unexpected token {
    at new Script (vm.js:84:7)
    at createScript (vm.js:264:10)
    at Object.runInThisContext (vm.js:312:10)
    at Module._compile (internal/modules/cjs/loader.js:684:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
    at executeUserCode (internal/bootstrap/node.js:342:17)
Цитата Сообщение от amr-now Посмотреть сообщение
Вы кстати как скачали, что у вас ошибки не появилось?
Нет. Просто скачал обычный архив
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
08.01.2019, 10:36
Цитата Сообщение от Jasta Посмотреть сообщение
node.js
Это только ради некоего алгоритма шифрования?... Это как коробок спичек перевозить на КАМАЗе.
Jasta, так, на всякий случай: может, сам (математический) алгоритм здесь приведете или ссылку на него. Если не особо сложный, может, накидаем его прямо здесь на JS?
Тем более, судя по
Цитата Сообщение от Jasta Посмотреть сообщение
<!DOCTYPE html>
Цитата Сообщение от Jasta Посмотреть сообщение
<body> <script>
Вам необходимо шифрование на стороне клиента, путем запуска вебстраницы в браузере? Если да, то дело вот в чем. Даже если Вы установите node.js у СЕБЯ на локальном компьютере и если после этого путем (...) все-таки запустите эти скрипты, но ведь другие пользователи едва ли будут устанавливать у себя node.js. Поэтому у них шифрование работать не будет.
Другое дело, конечно, если Вам необходима именно серверная реализация. Но и в этом случае, судя по изобилию (по Вашей ссылке) лично я бы лучше по-быстрому написал сам на РНР. Ну, или на С++, если хостер разрешает запуск С++. И не заморачивался бы с поиском ошибок в чужом коде.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
08.01.2019, 11:57
Jasta, Htext, как понимаю, ту кучку файлов вполне можно допилить и до браузерной версии.
Но это надо специально заморочиться и потратить время...
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
10.01.2019, 12:26  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
Если не особо сложный, может, накидаем его прямо здесь на JS?
Ну давайте попробуем. К тому же я уточнил и мне нужно не шифрование по Эль-Гамалю, а ЭЦП по нему же, а таких проектов на JS, GitHab не находит. В целом алгоритм не выглядит особо трудным, его можно найти хоть на википедии, хоть здесь.
Самую малость, а именно выбор числа P, я уже написал сам:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var checkP = function () {
    var p = document.getElementById('numberP').value;
    p=parseInt(p);
    console.log(p);
if ((p%2==0)&&(p!=2)) // любое четное число - составное
   document.getElementById('errorP').style.display = 'block';
else if (p==2)//число 2 простое
     document.getElementById('errorP').style.display = 'none';
else{ // число нечетное
     k=Math.round(Math.sqrt(p));
     flag = false;
             console.log(k);
     for(i=2; i<k+1; i++)
        if(p%i==0)
        {
          document.getElementById('errorP').style.display = "show";
          flag = true;
          break;
         }
            
     if (flag == false)
        document.getElementById('errorP').style.display = 'none';
}
}
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="css/style.css">
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="js/elgamal.js"></script>
    
</head>
<body> 
   <form action="" name="enterP">
    <input type="text" id="numberP" name="numberP" value="55">
    <input type="button" value="ok" name="sendP" onclick="checkP()">
    <span id="errorP" >Число P должно быть простым</span>
    </form>
</body>
</html>
CSS
1
2
3
#errorP {
    display: none;
}
Сейчас пытаюсь в курить как определять число g....
P.S. Нашёл более простую реализацию Эль-Гамаля, но опять же там не ЭЦП
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
10.01.2019, 22:12

Не по теме:

Jasta, я постараюсь ответить чуть позже, сейчас пока дома ремонт, бардак и т.п., не всегда добираюсь до компьютера.
А, если не секрет, для какой цели Вам потребовался именно этот метод шифрования? Например, почему не md5, sh256 или т.п.?



Добавлено через 4 минуты
А, похоже, я понял: видимо, Вы делаете что-то типа собственной реализации протокола криптошифрования по типу https.
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
10.01.2019, 23:17  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
Вы делаете что-то типа собственной реализации протокола криптошифрования
Да не всё проще..... последняя часть моей индивидуальной работы в универе
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
13.01.2019, 20:43  [ТС]
Цитата Сообщение от Jasta Посмотреть сообщение
Сейчас пытаюсь вкурить как определять число g....
Так если я всё верно понял то первообразный корень это число которое при возведении в разные степени по модулю p, в остатке будут оставаться числа от 1 до p - 1.
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
14.01.2019, 16:17
В Вашем коде если я ввожу число, скажем, 59, результат получается 8. Результат не является простым числом.

Добавлено через 5 минут
Цитата Сообщение от Jasta Посмотреть сообщение
первообразный корень это число которое при возведении в разные степени по модулю p
Не совсем разные: https://ru.wikipedia.org/wiki/... 5%D0%BB%29
Там в показателе степени функция Эйлера от m.
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
14.01.2019, 16:33  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
скажем, 59, результат получается 8.
Так всё верно, 59 это простое число, а 8 это округлённый корень из 59. Вывод в консоль остался просто со времён отладки, забыл убрать
0
365 / 124 / 22
Регистрация: 08.01.2015
Сообщений: 1,418
Записей в блоге: 2
14.01.2019, 17:07
Может, тогда
JavaScript
1
k =    Math.floor((Math.random()*(p-3)) + 2);
?

Добавлено через 12 минут
"Выбирается целое число g — первообразный корень p." -
наверное, имеется в виду Выбирается целое число g — первообразный корень по модулю p.

Добавлено через 3 минуты
Цитата Сообщение от Jasta Посмотреть сообщение
пытаюсь вкурить как определять число g
Похоже, только перебором. Деление с остатком - это необратимая операция "логарифмирования". Собственно, потому она и используется для криптошифрования (расшифровать обратно - невозможно).
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
14.01.2019, 18:31  [ТС]
Цитата Сообщение от Htext Посмотреть сообщение
Может, тогда
Если вы про число k, то оно суррогатно и используется лишь для определения является ли нечётно число простым и не используется при шифровании.
Цитата Сообщение от Htext Посмотреть сообщение
Похоже, только перебором.
Да именно. Что бы найти первообразную, нужно взять делители числа p - 1. Затем возвести числа от 2 до p - 1, в степень на эти делители, и если получившиеся степени числа - 1, и не делится на него, то мы нашли наш первообразный корень. Подробнее мне объяснили тут.
0
 Аватар для Jasta
1515 / 572 / 137
Регистрация: 20.02.2016
Сообщений: 3,378
13.03.2019, 20:00  [ТС]
Доброго всем времени суток) Хотел узнать можно ли где то найти реализацию ЭЦП методом Эль-Гамаля на JavaScript??? На GitHub удалось найти только версию на Java
Заранее всем спасибо)

 Комментарий модератора 

Правила форума

4. Порядок создания тем.
4.13 Если на ваш вопрос долгое время нет ответа, уточните его, приведите дополнительные сведения, которые могут помочь участникам форума решить вашу проблему.
4.14 Чтобы "поднять" тему в разделе и поиске по форуму, используйте осмысленные сообщения, например "Тема/проблема/задача актуальна". Если вы чего-то достигли в решении проблемы на этот момент, сообщите об этом.

5. Запреты и ограничения.
5.5 Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2019, 20:00
Помогаю со студенческими работами здесь

Де/шифрование по алгоритму Эль-Гамаля
Суть в чём: мне необходимо реализовать шифрование и дешифрование текста с использованием алгоритма Эль-Гамаля. С самой реализацией особых...

Шифрование сообщения схемой Эль-Гамаля
Всем привет. Очень сильно нужны пояснения, насчет шифрования текстового сообщения. Если сообщение для шифрования число, то понятно как. А...

Шифрование Эль-Гамаля: исправить ошибку в программе
Помогите исправить программу, не шифруется выдает ошибку

Шифрование Эль-Гамаля: исправить код расшифровки
Написал функцию шифрования и расшифрования. Но расшифровывает не правильно, не могли бы помочь: // p, g, y - открытые ключи Эль-Гамаля ...

Шифр Эль-Гамаля
В программе при вводе маленьких натуральных значения р,при расшифровке получаются непонятные символы.В чем проблема??? #include...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru