2017-06-22 42 views
-2

如何獲得RSA加密進度?我想在進度條上顯示它。 感謝您的幫助。C# - 獲取RSA加密進度

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

通過將總字節數保存在一個變量中,並將當前字節數保存在另一個變量中進行加密。閱讀[問],顯示你的代碼並解釋你所嘗試的。 – CodeCaster

+1

您不能,該方法不報告進度。如果可能的話,你唯一的選擇是用較小的塊調用該方法或類似的方法,以更新兩者之間的進度。 –

+1

**但是,您通常不會使用RSA加密來加密大型二進制文件。相反,您生成一個隨機密鑰並使用更快的加密方法,如RIJNDAEL,只用RSA加密密鑰。 –

回答

1

使用16k位密鑰我可以在2893ms(如此〜3ms)中進行1000次加密調用,這似乎不夠慢需要進度條。

解密另一方面,對於1000個呼叫是458554ms(所以〜460ms每個)。但是半秒鐘仍然看起來不像是進度條。並沒有很多人有16K位RSA密鑰(因爲他們需要幾個小時才能生成)

一些其他的快速號碼(每1000和通話時間,以毫秒爲單位):

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 

所以最好你能做到是發送短信的虛假進度條......你做了一些啓發式的檢查,你認爲它會花費多長時間,然後人爲地移動進度條,然後在沒有實際完成的情況下以80%的時間執行「eep」時刻。

由於指導僅使用不對稱操作來引導對稱操作(如註釋中所建議的那樣),如果對象操作速度足夠慢,您可能只能在對稱操作上使用進度條你保證它。如果你想爲非對稱操作投入一個模糊因素,它不會受到傷害。

+0

注意到OP正在使用4096位密鑰,所以時間很少。必須有其他事情正在進行。 – zaph

0

檢查這個博客帖子:https://www.codeproject.com/Articles/10877/Public-Key-RSA-Encryption-in-C-NET

你可以讓你的每一次迭代的for循環增加你的進度條。

更具體的幫助發佈您的代碼,並讓我們知道你卡在哪裏。

+0

謝謝,但我正在使用RSA.Encrypt函數,而這只是一個命令。我想獲得這個功能的進展,因爲它需要很多時間。 – Kaprog

+0

我認爲你可以在那裏更具體。用一些代碼編輯你的問題,這樣我們就可以更好地理解你做了什麼。你使用什麼庫來進行RSA加密? –

+0

@Kaprog是這個特定的庫還是來自標準庫?告訴類'System.Cryptographi ...'的完整路徑。 – i486