"Schlechte Daten" CryptographicException
Ersten, ich habe nur geschrieben das folgenden code für Akademische Zwecke. Der Grund ich sagen dies ist weil ich bin nicht setzen dieses in einer Produktionsumgebung, und dafür bin "Umgehung" einige der overhead, das würde ich tun, wenn ich war, ich muss einfach in der Lage sein zu ver - /entschlüsselt einen string mit dem code unten. Ich war in der Lage, es zu tun ein paar mal, aber aus irgendeinem Grund begann ich empfangen "CryptographicException Bad Data" und bin mir nicht sicher, was das problem verursachen könnte.
private string RSAEncrypt(string value)
{
byte[] encryptedData = Encoding.Unicode.GetBytes(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
encryptedData = RSA.Encrypt(encryptedData, false);
return Convert.ToBase64String(encryptedData);
}
}
private string RSADecrypt(string value)
{
byte[] encryptedData = Encoding.Unicode.GetBytes(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
encryptedData = RSA.Decrypt(encryptedData,false);
return Convert.ToBase64String(encryptedData);
}
}
Es ist nur das werfen dieser Ausnahme in der RSADecrypt nennen.
Irgendwelche Ideen? Ich habe irgendwo gelesen, es könnte zu tun haben mit der erwarteten Größe von encryptedData übergeben wird, in RSA.Entschlüsseln.
Dank
}
- Äh, wie sind Sie mit der Weitergabe der Schlüssel zwischen den Methoden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren Sie den Text hin und her mit einem string-Codierung (d.h.
Encoding.Unicode
).Konvertieren, die verschlüsselte Daten hin und her mit Base-64 - (d.h.
Convert.[To/From]Base64String
);Wie diese:
http://blogs.msdn.com/b/shawnfa/archive/2005/11/10/491431.aspx
Gibt es eine gute, richtige Beispiel hier:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx
ByteConverter.GetString
nichtEncoding.ToString
RSA ist, soll nicht zum verschlüsseln großer Objekte. Sie erhalten von Ausnahmen ist man über die Polsterung begrenzen. Die eigentliche Grenze ist auf der Grundlage der Polster (mit
false
bedeutet, Sie sind mit der alten PKCS#1 v1.5 padding) und die Länge des öffentlichen Schlüssels (2048 bit).Den richtigen Weg zu verwenden
RSA
mit dem großen Objekt zu verschlüsseln, das große Objekt mit einem symmetrischen Schlüssel (z.B. eine 256 bitAES
secret key) und verschlüsselt diesen kleine Schlüssel mit IhremRSA
öffentlichen Schlüssel.Finden Sie code, um solche Dinge zu tun auf meinem blog.
Hatte ich selbiges problem, das war, weil ich diese in meiner Global.asax-Datei zu konvertieren Url in Kleinbuchstaben.
So
Beispiel
Wenn die Verschlüsselung fertig ist mit dem base64-string Kodieren als
Dann schlagen die Maßnahmen, die die "Application_BeginRequest" Umwandlung in
Sehen Sie die RZ war in Kapital umgewandelt in kleine rz dies wird fehlschlagen der Entschlüsselung.
Lösung
Innen RouteConfig Klasse RegisterRoutes Methode setzen Sie diese, wenn Sie möchten, dass die url in Kleinbuchstaben