2017-06-22 2 views
-2

Wie kann ich den RSA-Verschlüsselungsfortschritt erhalten? Ich möchte es in Fortschrittsbalken anzeigen. Danke für Hilfe.C# - RSA-Verschlüsselungsfortschritt erhalten

using System.Security.Cryptography; 
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(4096); 

//I want to get percentage process of this function, because it takes a lot of time. 
byte[] encrypted = RSA.Encrypt(Encoding.Default.GetBytes("some text", true)); 
+2

Indem Sie die Gesamtanzahl der Bytes in einer Variablen halten und die aktuelle Anzahl der Bytes während der Verschlüsselung in einer anderen. Lies [ask], zeige deinen Code und erkläre, was du versucht hast. – CodeCaster

+1

Sie können nicht, diese Methode meldet keinen Fortschritt. Die einzige Möglichkeit, wenn dies überhaupt möglich ist, besteht darin, diese Methode oder eine ähnliche mit kleineren Blöcken aufzurufen, um den Fortschritt dazwischen zu aktualisieren. –

+1

** Allerdings verschlüsseln Sie normalerweise keine großen Binärdateien mit RSA-Verschlüsselung. Stattdessen generieren Sie einen zufälligen Schlüssel und verwenden eine schnellere Verschlüsselungsmethode wie RIJNDAEL, wobei Sie den Schlüssel nur mit RSA verschlüsseln. –

Antwort

1

Mit einem 16k-Bit-Schlüssel kann ich 1000 Anrufe in 2893ms verschlüsseln (also ~ 3ms pro), das scheint nicht langsam genug, um einen Fortschrittsbalken zu benötigen.

Entschlüsseln, auf der anderen Seite war 458.554ms für 1000 Anrufe (also ~ 460ms pro). Aber eine halbe Sekunde scheint eine Fortschrittsanzeige noch nicht wirklich zu rechtfertigen. Und nicht sehr viele Menschen haben 16k-Bit-RSA-Schlüssel (da sie Stunden in Anspruch nehmen zu erzeugen)

einige andere schnelle Zahlen (Zeit pro 1000 Anrufe, in ms):

Keysize | Encrypt | Decrypt 
--------|---------|-------- 
    16384 | 2893 | 458554 
    4096 |  216 | 14636 
    3584 |  182 | 13259 
    3072 |  149 | 8370 
    2560 |  127 | 4680 
    2048 |  94 | 2083 
    1536 |  86 | 1236 
    1024 |  71 | 473 
    512 |  64 | 150 

So ist die beste Sie tun können, ist der falsche Fortschrittsbalken beim Versenden von Textnachrichten ... du machst einige Heuristiken für wie lange du denkst, dass es dauern wird, und künstlich den Fortschrittsbalken bewegen, dann einen "eep" -Moment bei 80% machen, wenn es nicht wirklich gemacht wird.

Da die Anleitung darin besteht, nur asymmetrische Operationen zum Bootstrap symmetrischer Operationen zu verwenden (wie bereits in den Kommentaren vorgeschlagen), können Sie wahrscheinlich nur für die symmetrischen Operationen einen Fortschrittsbalken verwenden, wenn sie langsam genug sind Sie, um es zu rechtfertigen. Wenn Sie einen Fudge-Faktor für die asymmetrische Operation einwerfen möchten, würde es nicht schaden.

+0

Beachten Sie, dass das OP 4096-Bit-Schlüssel verwendet, die Zeiten sind winzig. Es muss etwas anderes passieren. – zaph

0

prüfen diese Blog-Post: https://www.codeproject.com/Articles/10877/Public-Key-RSA-Encryption-in-C-NET

Sie können jede Iteration Ihrer for-Schleife machen erhöhen Sie Ihre Fortschrittsbalken.

Für genauere Hilfe poste deinen Code und lass uns wissen wo du feststeckst.

+0

Danke, aber ich benutze die RSA.Encrypt Funktion, und das ist nur ein Befehl. Ich möchte einen Fortschritt dieser Funktion bekommen, weil es viel Zeit in Anspruch nimmt. – Kaprog

+0

Ich denke, dass Sie dort spezifischer sein können. Bearbeiten Sie Ihre Frage mit etwas Code, damit wir besser verstehen können, was Sie tun. Welche Bibliothek verwenden Sie für die RSA-Verschlüsselung? –

+0

@Kaprog Ist diese spezielle Bibliothek oder aus der Standardbibliothek? Erzähle den vollständigen Pfad zur Klasse 'System.Cryptographi ...'. – i486