ЭЦП ЭЛЬ ГАМАЛЯ PYTHON

Электронно-цифровая подпись (ЭЦП) Эль-Гамаля является одним из алгоритмов шифрования, позволяющим генерировать пару ключей для создания и проверки подписи данных.

Для генерации ключей в Python можно использовать стандартную библиотеку crypto и реализовать следующий код:

from Crypto.Util.number import getStrongPrime, GCDimport random# Select strong primes p,qpq_bits = 1024p = getStrongPrime(pq_bits)q = getStrongPrime(pq_bits)# Select generator of cyclic groupdef gen(g): if GCD(g, p-1) != 1 or pow(g, q, p) != 1: return False else: return gg_min = 2g_max = pow(p, 2)while True: g = random.randint(g_min, g_max) if gen(g): break# Generate private keyx = random.randint(1, q-1)# Generate public keyy = pow(g, x, p)# Save public and private keys to fileswith open('public_key.txt', 'w') as f: f.write('{}, {}, {}'.format(p, q, y)) with open('private_key.txt', 'w') as f: f.write(str(x))

Для создания и проверки подписи данных можно использовать следующий код:

from hashlib import sha256def sign(msg, x): k = random.randint(1, q-1) r = pow(g, k, p) % q h = int.from_bytes(sha256(msg).digest(), byteorder='big') s = (h - x*r) * pow(k, -1, q) % q return r, sdef verify(msg, r, s, y): h = int.from_bytes(sha256(msg).digest(), byteorder='big') w = pow(s, -1, q) u1 = h * w % q u2 = r * w % q v = pow(g, u1, p) * pow(y, u2, p) % p % q return v == r

В данном примере используется хэш-функция SHA-256 для получения хэша сообщения и генератор циклической группы - случайное число g в диапазоне от 2 до p^2, удовлетворяющее условиям корректности.

Система Эль Гамаля

Асимметричное шифрование, цифровая подпись, алгоритм RSA, схема Эль-Гамаля

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

Упрощаем конструкции if-elif-else в python

Шифр Эль Гамаля

Программирование и верстка расписания богослужений (интегрированные с excel) для pygame.ru

Извлекаем пароли от wi fi при помощи Python

BLGPG-E0260C2F94D1-24-11-23-21

Новые материалы: