Ich benutze MassTransit 3.4 und den EncryptedSerializer. Nachrichten werden von meiner Anwendung korrekt verschlüsselt und entschlüsselt, aber jetzt möchte ich in der Lage sein, die base64-codierten Nachrichten zu decodieren, die in den RabbitMQ-Warteschlangen "_error" angezeigt werden. Ich möchte ein Programm schreiben, um Benutzern zu ermöglichen, den Inhalt der base64-kodierten und verschlüsselten Nachrichten zu entdecken, und ich habe Mühe, die Nachrichten richtig zu dekodieren.Decrypt Base64-codierte RabbitMQ-Nachricht
Hier ist, was ich bisher getan habe. Kopieren Sie die "Payload" -Bits aus der RabbitMQ-Verwaltungsoberfläche in meinen Texteditor und versuchen Sie, Code Convert.FromBase64String (Text) auszuführen, und übergeben Sie dann das Byte-Array an eine Entschlüsselungsfunktion wie die one found here. Das funktioniert fast - ich sehe die meisten Zeichen der Payload im Klartext, aber viele Zeichen sind durcheinander. Ich kann nicht die gesamte Nachrichtennutzlast teilen, aber hier ist ein Screenshot von LinqPad, der einige durcheinandergebrachte Zeichen zeigt (mit roter Farbe, die von mir zum Schutz hinzugefügt wurde). Siehst du die schwarzen komischen Charaktere? Und das führende "g"? Was ist das Problem?
Hier ist ein Code-Snippet ich den entschlüsselten Text zu bekommen bin mit (ich auch verschiedene Kodierungen ohne Erfolg versucht haben):
using (Stream msDecrypt = new MemoryStream(cipherText, false))
using (Stream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt, System.Text.Encoding.UTF8, false, 1024, true))
{
plaintext = srDecrypt.ReadToEnd();
}
Wenn ich versuche, Masstransit-Stil zu verwenden, Entschlüsselung eines NewtonSoft BsonReader verwenden, erhalte ich „Cryptographic: Padding ungültig ist und nicht entfernt werden kann“, wenn es Entsorgen auf dem Crypto Objekt aufzurufen versucht:
using (Stream msDecrypt = new MemoryStream(cipherText, false))
using (Stream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var jsonReader = new BsonReader(csDecrypt))
{
envelope = deserializer.Deserialize<MessageEnvelope>(jsonReader);
}
Was mache ich hier falsch?
Aktualisieren: Wenn ich in Notepad ++ einfügen, zeigt es eine Vielzahl von Steuerzeichen. Die Zeichenfolge beginnt mit gmessageId (EOT und STX sind Steuerzeichen). Es gibt eine Menge STX-Zeichen - ich denke, dass diese entweder Anführungszeichen oder Doppelpunkte oder etwas sein sollen ... Wie kann ich diese in die richtigen Symbole umwandeln?
Interessant, bist du sicher, dass _should_ kein Steuerzeichen in der Nachricht sein sollte? Trotzdem sieht es nach einem Codierproblem aus – kennyzx