簡體   English   中英

C#BouncyCastle RSA加密和解密

[英]C# BouncyCastle RSA Encryption and Decryption

關於使用BouncyCastle進行RSA加密和解密的許多主題,但是我遇到了一些意外的行為。

我正在嘗試使用大小為64字節的私鑰加密64字節的數據阻止

我按以下方式計算RSA加密:

public byte[] Encrypt(byte[] data, AsymmetricKeyParameter key)
{
    var engine = new RsaEngine();
    engine.Init(true, key);
    var blockSize = engine.GetInputBlockSize();
    return engine.ProcessBlock(data, 0, blockSize );
}

我使用公共密鑰計算解密,如下所示

public byte[] Decrypt(byte[] data, AsymmetricKeyParameter key)
{
    var engine = new RsaEngine();
    engine.Init(false, key);
    var blockSize = engine.GetInputBlockSize();
    return engine.ProcessBlock(data, 0, blockSize );
}

我發現的是,當我使用64字節的私鑰加密我的64數據時,我得到了64字節的加密dataBlock。

但是,當我使用64字節的公共密鑰解碼64字節的數組時,我會得到一個62字節大小的數據塊。 奇怪的是62字節數組中包含的值等於64字節原始數組(預加密)的值,但是解碼后的數組缺少原始數據的第一個索引和最后一個索引。

我嘗試使用不同的鍵和不同的數據集,並且發生相同的事情。

我一定做錯了,但看不到。

干杯。

您弄錯了基本概念。

  1. 512位RSA很弱,至少使用1024位
  2. 私鑰不用於加密。 用於解密和簽名。 公鑰用於加密和驗證。
  3. 填充對於RSA安全至關重要。 典型的填充方案需要幾十個字節。
  4. 即使使用RSA教科書,RSA也只能處理小於模數的值。 因此,512位模數不能對任意64字節/ 512位值進行操作。 但是只有511位。

您應該退后一步,並描述您實際想要實現的目標,以便我們找到適合您需求的方案。 只有在那之后,您才需要擔心實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM