private void checkSignButton_Click(object sender, EventArgs e) { try { DS ds = new DS(verifiableFilePath); Key openKey = new Key(); DigitalSign currentSign = new DigitalSign(); BinaryFormatter bf = new BinaryFormatter(); XmlSerializer serializer = new XmlSerializer(typeof(Key)); using (FileStream fs = new FileStream(verifiableSignPath, FileMode.Open)) { currentSign = (DigitalSign)bf.Deserialize(fs); } using (FileStream fs = new FileStream(verifiablePathOpenKey, FileMode.Open)) { openKey = (Key)serializer.Deserialize(fs); } if (ds.CheckSing(currentSign, openKey)) { MessageBox.Show("Подпись корректна", "Проверка подписи", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } else { MessageBox.Show("Подпись некорректна, возможно файл был изменен, поврежден или была попытка изменить файл", "Проверка подписи", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void signButton_Click(object sender, EventArgs e) { try { DS ds = new DS(filePath); XmlSerializer serializer = new XmlSerializer(typeof(Key)); Key ClosedKey; DigitalSign currentSign = new DigitalSign(); using (FileStream fs = new FileStream(singPath, FileMode.Open)) { ClosedKey = (Key)serializer.Deserialize(fs); } currentSign.Sing = ds.ToSign(ClosedKey); BinaryFormatter bf = new BinaryFormatter(); using (FileStream fs = new FileStream(filePath + ".sign", FileMode.OpenOrCreate)) { bf.Serialize(fs, currentSign); } MessageBox.Show("Файл успешно подписан", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public bool CheckSing(DigitalSign sign, Key openKey) { //устанавливаем открытый ключ this.openKey = openKey; //получаем хеш файла string fileHesh_x16 = GetHash(filePath); //переводим хеш в 10x число var currentHash_x10 = BigInteger.Parse(fileHesh_x16, System.Globalization.NumberStyles.AllowHexSpecifier); // устанавливаем подпись var currentSign_x10 = BigInteger.Parse(sign.Sing); //высчитываем хеш из подписи BigInteger sign_x10 = BigInteger.ModPow(currentSign_x10, BigInteger.Parse(openKey.key), BigInteger.Parse(openKey.n)); // если хеши совпадают возвращаем true, иначе false if (currentHash_x10 == sign_x10) { return(true); } else { return(false); } }