2 Stimmen

signedXml.CheckSignature gibt immer false zurück

Ich kämpfe damit, dass diese Ver- und Entschlüsselung richtig funktioniert. Ich verwende este Klasse, die von Wolfwyrd und este Anweisungen.

Nachstehend finden Sie den Code:

RSACryptoServiceProvider rsaKey = EncryptionUtils.GetRSAFromSnkFile(@"c\:a.snk");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml("<foo />");

SignXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229745.aspx

bool result = VerifyXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229950.aspx

System.Diagnostics.Debug.Write(result); //false

gibt zurück. false . Hinweis: Ich habe dieselbe snk-Datei verwendet, und es ist dasselbe verschlüsselte XML-Dokument, das ich zu überprüfen versuche, warum gibt es zurück false ? Was übersehe ich?

2voto

FutureGuy Punkte 61

Ich danke Ihnen beiden für Ihre Antwort. Am Ende habe ich einfach ein Schlüsselpaar aus privatem und öffentlichem Schlüssel erstellt und damit das Dokument signiert, wobei der öffentliche Schlüssel zur Anwendung gehört. Wenn ich das früh genug gesehen hätte, hätte ich es vielleicht verwendet, aber ich bin sicher, dass jemand anderes es nützlich finden wird. Nochmals vielen Dank.

1voto

Rasmus Faber Punkte 47181

Versuchen Sie, die Implementierung von GetRSAFromSnkBytes(byte[]) im Code von Wolfwyrd zu ändern:

private static RSACryptoServiceProvider GetRSAFromSnkBytes(byte[] snkBytes)
{
  if (snkBytes == null)
    throw new ArgumentNullException("snkBytes");

  RSAParameters param = GetRSAParameters(snkBytes);

  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  rsa.ImportParameters(param);
  return rsa;
}

Ich verstehe nicht wirklich, warum er zuerst einen Schlüssel erzeugt und dann den snk-Schlüssel in den Container importiert, anstatt einfach mit einem leeren Schlüsselcontainer zu beginnen.

Sie könnten auch erwägen, Ihren Schlüssel einfach mit .NET zu generieren, anstatt sich mit dem snk-Format herumzuschlagen.

Wenn Sie die erste Zeile in Ihrem Beispiel ändern in

RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(1024);

funktioniert Ihr Code ebenfalls problemlos (und Sie können den resultierenden Schlüssel selbst serialisieren).

1voto

Wolfwyrd Punkte 15372

Gute Stelle, übriggebliebener Schrott von dem Projekt, aus dem ich sie herausgezogen habe. Die Bibliothek wurde aktualisiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X