繁体   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