Was ich habe: Eine .Net Client-Anwendung und eine Nodejs Server-Anwendung.Anmeldung mit BouncyCastle in .NET und Überprüfung in NodeJS
Was ich versuche zu erreichen: .Net Client-Anwendung signiert die Anfrage Daten mit einem Client privaten Schlüssel und die Signatur sollte auf dem Server mit öffentlichen Client-Schlüssel verifiziert werden.
Das Problem: Überprüfung schlägt immer fehl.
-Client-Code (mit BouncyCastle):
var encoder = new UTF8Encoding();
var inputData = encoder.GetBytes(plainText);
var signer = SignerUtilities.GetSigner("SHA256WITHRSA");
signer.Init(true, privateKey);
signer.BlockUpdate(inputData, 0, inputData.Length);
var sign = signer.GenerateSignature();
var signmsg = Convert.ToBase64String(sign); //This signature is sent to server
Server-Code verwendet ('Ursa'):
var isauthentic=pubkeyClient.hashAndVerify('sha256', plainText, signmsg, 'base64');
// this is always false. plainText is the same request message in the
// client and signmsg is the signature sent by the client
Server-Code verwenden ('node-rsa'):
var b = new Buffer(signmsg, 'base64');
var auth=pubkeyClient.verify(plainText, b); // This returns false too
EDIT: Code hinzugefügt, der das Node-RSA-Modul verwendet. Das Ergebnis ist ziemlich gleich.
Was mache ich hier falsch? Gibt es einen anderen Weg, um meine Anforderung zu erfüllen?
Dank Ihrer Hilfe konnte ich das Problem eingrenzen. Das Problem besteht darin, dass die plainText-Variable in der Clientanwendung eine JSON-Zeichenfolge ist, die mit JavaScriptSerializer() generiert wurde. Serialize (Daten) ;. Dies fügt '/' dazwischen hinzu, was dazu führt, dass sich die Zeichenfolge auf dem Client und auf dem Server unterscheidet, was dazu führt, dass die Verifizierung die ganze Zeit fehlschlägt. Gibt es eine Möglichkeit, dies zu umgehen? – mkr231
Was sind 'Daten' in diesem Fall? Ich habe noch nie gesehen, dass ein JSON-Serializer zufällig einen Schrägstrich in die serialisierte Ausgabe eingefügt hat. – mscdex
'Daten' in diesem Fall ist ein Objekt, das in ein JSON-Objekt unter Verwendung von' JavaScriptSerializer() serialisiert wird (Daten); '. Diese JSON-Zeichenfolge wird verschlüsselt und an den Server gesendet. Der Server entschlüsselt die Nachricht und erhält eine visuell ähnliche JSON-Zeichenfolge. Aber es gibt einen Unterschied, den ich nicht herausfinden kann. Das verursacht das Problem für mich. Anstatt der JSON-Zeichenfolge, wenn ich eine einfache Zeichenfolge wie "Hello World" verwende, wie Sie es getan haben, funktioniert das ganz gut. Ich bin mir nicht sicher, warum das passiert. – mkr231