Ich versuche, ein kleines Programm zu erstellen, das erkennen kann, ob auf Dateien/Dateien zugegriffen wurde oder mit dem DSA-Signaturalgorithmus geändert wurde.Unterschiedliche Ergebnisse beim Signieren derselben Daten mit gleichen Schlüsseln in DSA cryptoservice provider
Ich gebe Ihnen diesen kleinen Beispielcode, um das Problem zu beschreiben. Angenommen, wir haben eine Datei c: \ Temporary \ Temp.txt. Wir haben in unserem Programm 2 Tasten. Wenn wir auf die erste Schaltfläche klicken, erstellen wir eine digitale Signatur über den Namen der Datei und die letzte Zugriffszeit darauf. Wir exportieren auch die Parameter und speichern sie. Beim zweiten Klick klicken wir die Signatur in der gleichen Datei mit den zuvor exportierten Parametern an und vergleichen die neue Signatur mit der vorherigen.
Das Problem hier ist, dass das Programm (immer) gibt mir ein Ergebnis, dass die Datei zugegriffen wurde !!!!
Ich habe den Debugger verwendet, um das Problem zu finden und sah, dass alle Variablenwerte zwischen den 2 button_click-Ereignissen identisch sind und dass der Unterschied im Signierprozess auftritt.
Würden Sie mir bitte sagen, wo das Problem liegt? Hier ist der Code:
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";
}
}
}
ja SequenceEqual oder in String konvertieren zu vergleichen. –