"Ungültige Daten" CryptographicException

8

Erstens habe ich den folgenden Code nur für akademische Zwecke geschrieben. Der Grund, warum ich dies sage, ist, dass ich dies nicht in eine Produktionsumgebung setze und deshalb einen Teil des Overheads "umgehe", was ich tun müsste, wenn ich in der Lage wäre, eine Zeichenkette zu verschlüsseln / entschlüsseln der Code unten. Ich konnte es ein paar Mal tun, aber aus irgendeinem Grund erhielt ich "CryptographicException Bad Data" und bin mir nicht sicher, was das Problem verursachen könnte.

%Vor%

Diese Ausnahme wird nur beim RSADecrypt-Aufruf ausgelöst.

Irgendwelche Ideen? Ich habe irgendwo gelesen, dass es möglicherweise mit der erwarteten Größe von verschlüsselten Daten, die in RSA.Decrypt übergeben wird, zu tun hat.

Danke         }

    
TheJediCowboy 11.03.2012, 23:17
quelle

3 Antworten

15
  • Konvertieren Sie den Klartext unter Verwendung einer String-Codierung (d. h. Encoding.Unicode ).

  • Konvertieren Sie die verschlüsselten Daten mit Base-64 (d. h. Convert.[To/From]Base64String );

So:

%Vor%     
Rasmus Faber 12.03.2012, 08:14
quelle
6

Ссылка

  

Roundtrip-Chiffretext nicht über eine String-Codierung

     

Ein häufiger Fehler, den Benutzer bei der Verwendung von verwalteter Verschlüsselung machen   Klassen ist, dass sie versuchen, das Ergebnis einer Verschlüsselung zu speichern   Operation in einem String mit einer der Encoding-Klassen. Das   scheint Sinn zu machen, oder? Immerhin dauert Encoding.ToString () a   byte [] und konvertiert es in eine Zeichenfolge, die genau das ist, was sie waren   suchen.

     

...

     

Wenn Sie den Chiffretext in eine Zeichenfolge konvertieren möchten, verwenden Sie stattdessen   Base64-Codierung.

     

...

     

Ergebnisse in Code, der jedes Mal funktioniert, seit Base 64 codiert ist   garantiert in der Lage zu sein, irgendeine Eingangsbyte-Sequenz genau darzustellen.

Hier gibt es ein gutes, korrektes Beispiel: Ссылка

    
matthewk 11.03.2012 23:23
quelle
1

RSA soll keine großen Objekte verschlüsseln. Sie erhalten Ausnahmen, wenn Sie das Padding-Limit überschreiten. Das tatsächliche Limit basiert auf der Auffüllung selbst (die Verwendung von false bedeutet, dass Sie die alte PKCS # 1 v1.5 Auffüllung verwenden) und die Länge Ihres öffentlichen Schlüssels (2048 Bit).

Der richtige Weg, RSA mit einem großen Objekt zu verwenden, besteht darin, das große Objekt mit einem symmetrischen Schlüssel zu verschlüsseln (z. B. einen 256 Bit AES geheimen Schlüssel) und diesen kleinen Schlüssel zu verschlüsseln RSA öffentlicher Schlüssel.

Sie finden Code, um solche Dinge auf meinem Blog zu tun.

    
poupou 12.03.2012 13:48
quelle

Tags und Links