C#BouncyCastle RSA加密和解密

关于使用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字节的加密数据块.

但是当我使用64字节公钥解码64字节数组时,我得到一个大小为62字节的数据块.更奇怪的是,62字节数组中包含的值等于64字节原始数组的值(预加密),但是解码后的数组缺少原始数据的第一个索引和最终索引.

我尝试过使用不同的密钥和不同的数据集,同样的事情发生了.

我一定做错了什么,但我看不出来.

干杯.

最佳答案 你得到的基本概念是错误的.

> 512位RSA非常弱,至少使用1024位
>私钥不用于加密.这是解密和签名.公钥用于加密和验证.
>填充对RSA安全至关重要.典型的填充方案需要几十个字节.
>即使使用教科书RSA,RSA也只能处理小于模数的值.因此,512位模数不能在任意64字节/ 512位值上运行.但只有511位.

您应退后一步,描述您实际想要实现的目标,以便我们找到符合您需求的方案.只有在那之后你才应该担心实施它.

点赞