DSA İmzalama algoritması kullanılarak dosya/dosyalara erişilip değiştirilmediğini öğrenebilecek küçük bir program oluşturmaya çalışıyorum.Aynı verilerle aynı veriyi imzalarken DSA kripto sağlayıcısında
Sorunu açıklamak için size bu küçük örnek kodu vereceğim. Farz edelim ki bir dosyamız var c: \ Temporary \ Temp.txt. Programımızda 2 düğmemiz var. İlk tuşa bastığımızda, dosyanın adı ve üzerinde son erişim zamanı olan bir dijital imza oluşturuyoruz. Ayrıca parametreleri de dışa aktarıyoruz ve saklıyoruz. İkinci tuşa tıkladığınızda, daha önce dışa aktardığımız parametreleri kullanarak aynı dosyadaki imzayı yeniden oluştururuz ve yeni imzayı bir önceki ile karşılaştırırız.
Buradaki problem, programın (her zaman), dosyaya erişildiğini gösteren bir sonucu vermesidir !!
Sorunu bulmak için hata ayıklayıcıyı kullandım ve tüm değişken değerlerin 2 button_click olayı arasında aynı olduğunu ve farkın imzalama işleminde gerçekleştiğini gördüm.
Lütfen sorunun nerede olduğunu söyler misiniz? Sen ==
operatörünü kullanarak iki bayt dizileri karşılaştırdığınız
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Security.Cryptography;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string filename = @"C:\Temporary\Temp.txt";
DSAParameters parameters;
byte[] data_to_sign, signature;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Sign_button_Click(object sender, EventArgs e)
{
FileInfo f_info = new FileInfo(filename);
string file_information = f_info.FullName + f_info.LastAccessTime;
UnicodeEncoding byteEncoder = new UnicodeEncoding();
data_to_sign = byteEncoder.GetBytes(file_information);
DSACryptoServiceProvider dsaprovider = new DSACryptoServiceProvider();
parameters = dsaprovider.ExportParameters(true);
signature = dsaprovider.SignData(data_to_sign);
label1.Text = " Signature generated";
}
private void Verify_button_Click(object sender, EventArgs e)
{
FileInfo f_info = new FileInfo(filename);
string file_information = f_info.FullName + f_info.LastAccessTime;
UnicodeEncoding byteEncoder = new UnicodeEncoding();
data_to_sign = byteEncoder.GetBytes(file_information);
DSACryptoServiceProvider dsaprovider2 = new DSACryptoServiceProvider();
dsaprovider2.ImportParameters(parameters);
byte [] signature2 = dsaprovider2.SignData(data_to_sign);
if (signature == signature2)
label1.Text = "The file hasn't been accessed";
else
label1.Text = "Opp... The file has been accessed";
}
}
}
evet SequenceEqual için veya karşılaştırılması dizeye dönüştürmek karşılaştırın. –