Ich suche nach einer zuverlässigen Methode zur Überprüfung, ob die Zeichenfolge, die nach der Entschlüsselung der verschlüsselten Payload zurückgegeben wird, ein Garbage-Wert ist (wie: = z { Z : k/ ˃ d A * Ԥ = ? M 5). Ich versuche, die verschlüsselte Zeichenfolge mit einem anderen öffentlichen Schlüssel zu entschlüsseln, so dass ich, wie erwartet, eine Fehlermeldung wie oben angezeigt bekomme. Meine Frage ist, was ist der beste Weg, in C# zu validieren, ob die zurückgegebene Zeichenfolge eine gültige Zeichenfolge oder ein Müllwert ist.So validieren Sie den von Bouncy Castle zurückgegebenen Müllwert RSA-Entschlüsselung mit falschem Schlüssel
Antwort
eine Antwort von Jon Skeet hier gefunden: https://stackoverflow.com/a/7254261/2858235
foreach (char c in value)
{
if (c < 32 || c > 126)
{
...
}
}
Die Lösung Sie vorschlagen wird überprüfen, ob die zurückgegebene Zeichenfolge ASCII ist (technisch eine Teilmenge von ASCII) ... Betrachtet man Ihren Namen und Ihren Nachnamen, Sie sollten aus erster Hand wissen, dass die Welt nicht aus ASCII-Strings besteht. Unicode wurde aus einem Grund "erfunden". Jetzt, wie geschrieben here, ist RSA "formbar". Eine sehr einfache Lösung besteht darin, den Hash des Originaltexts (z. B. mit SHA256) an den Text anzuhängen/anzuhängen, bevor alles verschlüsselt wird, und dann zu überprüfen, ob der Hash nach der Entschlüsselung korrekt ist.
Wenn Sie nur mit RSA zu tun haben, verwenden Sie ein geeignetes Padding-Schema wie Optimal Asymmetric Encryption Padding (OAEP), wie in PKCS # 1 v2.0 definiert. Es verwendet intern Hashing, um zu prüfen, ob Fehler vorliegen. C# hat dafür native Unterstützung und Sie erhalten einen Fehler, wenn etwas Falsches passiert wie ein gebrochener Chiffretext oder der falsche Schlüssel.
Wenn Sie mit hybrid encryption (RSA + gewissen Blockchiffre) betroffen sind, schlage ich vor, dass Sie RSA-OAEP verwenden zusammen mit einem authentifizierten Betriebsart wie AES-GCM (erhältlich in C# durch BouncyCastle). Auf diese Weise können Sie alle (bösartigen) Manipulationen feststellen.
- 1. Bouncy Castle PGP Entschlüsselung Problem
- 2. Wie öffentliche PGP-Schlüssel mit Bouncy Castle in C signieren #
- 3. Bouncy Castle RSA-Schlüsselpaargenerierung mit Lightweight-API
- 4. Generierung X509-Zertifikat mit Bouncy Castle Java
- 5. EncryptionOperationNotPossibleException von Jasypt mit Bouncy Castle
- 6. Bouncy Castle TLS API-Nutzung
- 7. Bouncy Castle: PEMReader => PEMParser
- 8. HTTPS mit PSK mit Bouncy Castle
- 9. C# RSA Entschlüsselung mit Bouncy Castle
- 10. Java Bouncy Castle Kryptographie - Verschlüsseln mit AES
- 11. Packaging JAR mit Bibliotheken von Bouncy Castle in einzelne JAR
- 12. iText 2.1.7 benötigt Bouncy Castle 1.38, kann ich stattdessen Bouncy Castle 1.47 benutzen?
- 13. Ist Bouncy Castle API Thread sicher?
- 14. Laden Sie mehrere öffentliche Schlüssel aus einer Datei mit Bouncy Castle PGP
- 15. So verwenden Sie Bouncy Castle Lightweight-API mit AES und PBE
- 16. CMSSignedData von ASN.1-Codierung in Bouncy Castle
- 17. Entschlüsseln Zeichenfolge mit Bouncy Castle RC4-Algorithmus in C#
- 18. Fehler "InvalidCipherTextException: Daten Start falsch 64" mit Bouncy Castle
- 19. So ändern Sie das asymmetrische Schlüsselpaar, ohne den symmetrischen Schlüssel und den verschlüsselten Inhalt in CMS mit Bouncy Castle zu ändern
- 20. Read RSA PrivateKey in C# und Bouncy Castle
- 21. Bouncy Castle braucht lange, um RSA Schlüsselpaar zu generieren
- 22. Bouncy Castle Schlüsselspeicher (BKS): java.io.IOException: Falsche Version des Schlüsselspeichers
- 23. Wo befindet sich die Bouncy Castle API-Dokumentation?
- 24. Bouncy Castle X509V3CertificateGenerator.SetSignatureAlgorithm markiert veraltet. Was mache ich?
- 25. So verwenden Sie Linq mit Castle ActiveRecord
- 26. Speichern von Schlüsseln in Bouncy Castle Keystore sicherer als Speichern in verschlüsselten Einstellungen?
- 27. So validieren Sie scss
- 28. Wie erhält man PublicKey von PKCS10CertificationRequest mit der neuen Bouncy Castle Bibliothek?
- 29. PKIXCertPathBuilder schlägt mit Bouncy Castle Provider fehl, funktioniert aber mit Standardanbieter (SUN)
- 30. Wie ermitteln Sie die Größe des öffentlichen Schlüssels aus der CSR-Datei mit Bouncy Castle in Java?
Ich stimme zu, dass es ein sauberer Weg wäre, aber da in meinem Szenario, wird es eine clientseitige Änderung erfordern (weil sie die Zeichenfolge verschlüsseln und ich entziffere es in serverseitigem Code), werde ich mit meinem gehen müssen Lösung. Außerdem denke ich, es wäre in Ordnung, wenn ich nur diese "Teilmenge" von ASCII betrachte, da ich erwarte, dass meine Zeichenfolge nur diese Zeichen enthält. – tavier
BTW, nur neugierig, was ist falsch mit meinem Namen und Nachnamen. In Englisch, fällt es in diese Teilmenge von ASCII-Zeichen richtig? :) – tavier
@AshishAgrawal Wahrscheinlich die Hälfte der amerikanischen Programmierer denken, dass das ganze Alphabet in den AZ-Zeichensatz enthalten ist ... Sie können sich nicht einmal vorstellen, dass andere Sprachen Nicht-ASCII-Zeichen wie àèììù brauchen könnten (ohne auch nur an Chinesisch, Japanisch zu denken , die verschiedenen indischen Sprachen ...) ... Das kannst du in jeder Regex-Frage sehen ("Wie kann ich überprüfen, ob es ein Wort ist? Benutzt etwas wie' [A-Za-z] * '. Du solltest (oder deine Eltern sollten es sein) aus einem Teil der Welt, wo 'AZ' nicht dein ursprünglicher Zeichensatz ist. – xanatos