Диплом, курсовая, контрольная работа
Помощь в написании студенческих работ

Описание основных переменных и функций криптографического протокола «Электронные деньги». Пример работы программы

РефератПомощь в написанииУзнать стоимостьмоей работы

Int gcda (int a, int b) — Проверка на взаимную простоту. Если подпись верна, условие выполняется. Функция быстрого возведения в степень. Int pprime (int number) — подбор простого числа P. Int bist (int a, int chislo, int p, int m) — a ^ chislo * m mod p. Cout << «Подпись не подлинная» << endl; U = (h — (x * r) % (P — 1) + P — 1) % (P — 1); Проверка на взаимную простоту. Cout << «Подпись… Читать ещё >

Описание основных переменных и функций криптографического протокола «Электронные деньги». Пример работы программы (реферат, курсовая, диплом, контрольная)

Функции:

int gcda (int a, int b) — Проверка на взаимную простоту.

int gcd (int a, int b) — обощенный алгоритм Евклида:? * d mod p = 1.

int pprime (int number) — подбор простого числа P.

int bistr (int a, int chislo, int p) — функция быстрого возведения в степень.

int bist (int a, int chislo, int p, int m) — a ^ chislo * m mod p.

Переменные:

int P, Q, F, d, c, n, r, nn, ss, N, s, schetshop, schetshop — переменные необходимые для работы программы;

Программный код электронной подписи на базе шифра Эль-Гамаля

#include.

#include.

#include.

#include.

#include.

using namespace std;

//подбор простого числа P.

int pprime (int number).

{.

int count;

while (count ≠ 2).

{.

count = 0;

for (int i = 1; i <= number; i++).

{.

if (number % i == 0).

count++;

if (count > 2).

{.

number++;

break;

}.

}.

}.

return number;

}.

//функция быстрого возведения в степень.

int vozved (int a, int chislo, int p).

{.

int b;

int y = 1;

int t = log2 (chislo);

for (int i = 0; i < t+1; i++).

{.

b = chislo % 2;

chislo = chislo / 2;

if (b == 1).

y = y * a;

a = (a * a) % p;

}.

return y % p;

}.

// Проверка на взаимную простоту.

int vzprost (int a, int b).

{.

int q;

int u [3] = { a, 1, 0};

int v [3] = { b, 0, 1};

int T [3];

int c;

while (v [0] ≠ 0).

{.

c = u [0] / v [0];

T [0] = u [0] % v [0];

T [1] = u [1] - c * v [1];

T [2] = u [2] - c * v [2];

for (int i = 0; i ≠ 3; i++).

{.

u [i] = v [i];

v [i] = T [i];

}.

}.

return u [0];

}.

//обощенный алгоритм Евклида.

int evklid (int a, int b).

{.

int q, c;

int u [3] = { a, 1, 0};

int v [3] = { b, 0, 1};

int T [3];

while (v [0] ≠ 0).

{.

c = u [0] / v [0];

T [0] = u [0] % v [0];

T [1] = u [1] - c * v [1];

T [2] = u [2] - c * v [2];

for (int i = 0; i ≠ 3; i++).

{.

u [i] = v [i];

v [i] = T [i];

}.

}.

q = a + u [2];

return q;

}.

int main ().

{.

setlocale (0, «»);

nt m = 18;

//Подбор чисел P и G (подробнее стр. 19 — верх, 20 — середина).

int P, q, G;

q = rand () % 30;

q = pprime (q);

P = (2 * q) + 1;

G = 2 + rand () % (P — 1);

if (vozved (G, q, P) == 1).

G++;

int x;//держит в секрете.

x = 2 + rand () % (P-1);

int y;

y = vozved (G, x, P);//публикует в качестве открытого ключа.

//вычисление хэш-функции.

int h = vozved (2, m, P);

int k;

k = 1 + rand () % (P / 2);

for (;;).

{.

if (vzprost (k, (P — 1)) == 1).

break;

else.

k++;

}.

int r, u, s;

r = vozved (G, k, P);

u = (h — (x * r) % (P — 1) + P — 1) % (P — 1);

int kmin1;

kmin1 = evklid (P — 1, k);

s = (kmin1 * u) % (P-1);

///отправляем подписанное сообщение др пользователю.

int rez = vozved (y, r, P);

int rez1 = vozved (r, s, P);

int rezult = rez * rez1% P;

//если подпись верна, условие выполняется.

if (rezult == vozved (G, h, P)).

cout << «Подпись подлинная» << endl;

else.

cout << «Подпись не подлинная» << endl;

system («pause»);

}.

Показать весь текст
Заполнить форму текущей работой