コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }