Проблема в том что в итоге не совпадают свёртка и хеш-код после "шифрации"
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Пивк2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult dr = openFileDialog1.ShowDialog();
if (dr == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
}
System.IO.StreamReader inStream = new System.IO.StreamReader(@textBox1.Text);
string s = inStream.ReadLine();
textBox2.Text = s;
}
private void button2_Click(object sender, EventArgs e)
{
button2.Enabled = false;
string s1, s2, s3;
int p;
int q;
int h0;
s1 = textBox3.Text;
p = Convert.ToInt32(s1);
s2 = textBox4.Text;
q = Convert.ToInt32(s2);
s3 = textBox5.Text;
h0 = Convert.ToInt32(s3);
//textBox6.Text = h0.ToString();
int n;
n = p * q;
int nzv;
int d = 1;
nzv = (p - 1) * (q - 1);
while ((nzv%d)==0)
{
d = d + 1;
}
int ee=1;
while (((ee * d) % nzv) != 1)
{
ee = ee + 1;
}
//открытый ключ ее и n
//закрытый ключ d и n
int[] m = new int[15];
int f=0;
string s = textBox2.Text;
string alfavit = "1abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < s.Length; i++)
{
for (int j = 1; j < alfavit.Length; j++)
{
if (s[i] == alfavit[j])
{
//f = f + 1;
m[f] = j;
f = f + 1;
}
}
}
//f = f - 1;
//шифруем используя открытый ключ. открытый ключ ее и n
int[] c1 = new int[15];
int h1=h0;
int wq=0;
for (int i=0;i<f;i++)
{
wq = (m[i] + h1) * (m[i] + h1);
c1[i] = wq % n;
h1 = c1[i];
}
//всё правильно до этого момента
int ecp=0;
//textBox15.Text = Convert.ToString(h1);
int h11=h1;
for (int i = 1; i < d; i++)
{
h11 = h11 * h1;
}
//textBox16.Text = Convert.ToString(h11);
ecp = h11 % n;
//textBox17.Text = Convert.ToString(ecp);
s1 = s;
textBox6.Text = s1;
s1 = Convert.ToString(ecp);
textBox7.Text = s1;
s1 = Convert.ToString(ee);
textBox8.Text = s1;
s1 = Convert.ToString(n);
textBox9.Text = s1;
s1 = Convert.ToString(h0);
textBox10.Text = s1;
//проверка аутентичности
long m2=0;
long er=ecp;
for (int i = 1; i <ee; i++)
{
er = er * ecp;
}
textBox18.Text = Convert.ToString(er);
m2 = er % n;
textBox19.Text = Convert.ToString(m2);//проверено
int h3=h0;
int[] c3 = new int[15];
int az=0;
for (int i = 0; i < f; i++)
{
az = (m[i] + h3) * (m[i] + h3);
c3[i] = az % n;
h3 = c3[i];
}
textBox16.Text = Convert.ToString(m2);
int m3 = h3;
int m21 = Convert.ToInt32(m2);
textBox17.Text = Convert.ToString(m21);
textBox12.Text = Convert.ToString(m21);
textBox13.Text = Convert.ToString(m3);
if (m21 == m3)
{
textBox11.Text = "Сообщение полученное пользователем является аутентичным";
}
else
{
textBox11.Text = "Сообщение полученное пользователем не является аутентичным";
}
}
}
}