die Windows Data Protection API verwenden, ist es möglich, Daten im Speicher zu verschlüsseln, wie der folgende Code veranschaulicht:Verschlüsselung mit DPAPI ohne die Länge unverschlüsselter Daten aufzudecken?
byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting...");
// Encrypt the data in memory.
EncryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Encrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Decrypting...");
// Decrypt the data in memory.
DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
hier die Microsoft Referenz Siehe: https://msdn.microsoft.com/en-us/library/ms995355.aspx
jedoch die verschlüsselt gespeichert Daten in diesem Beispiel ist gleich groß wie die Originaldaten. Gibt es eine Möglichkeit, die DPAPI zum Verschlüsseln von Daten zu verwenden, ohne die Dateigröße der ursprünglichen Datei anzugeben? Zum Beispiel, den erzeugten Chiffretext an einem "zufälligen" Punkt innerhalb des Schlüssels zu verstecken, wie es mit einem Zeitblock möglich ist?
Warum konstruieren Sie nicht einfach Ihre Eingabedaten als Länge + Daten + Padding? –
Eine Möglichkeit sicherlich, obwohl dies die Analyse der Daten nach der Entschlüsselung erfordern würde, wenn ich denke, dass dies eine häufige genug Anliegen sein sollte, einige Implementierung bereits haben –
Das hängt von der Qualität der DPAPI-Verschlüsselung, und wie viel Sie über die Möglichkeit von bekannten Klartextangriffen. Eine andere Möglichkeit besteht darin, einen Schlüssel zu erzeugen, diesen für eine ordnungsgemäße Blockverschlüsselung zu verwenden (wie 'AesCryptoServiceProvider') und nur den Schlüssel mit DPAPI zu schützen, so dass die bekannte Länge kein Problem ist. –