【发布时间】:2026-02-09 13:25:01
【问题描述】:
有很多关于使用 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 字节原始数组的值(预加密),但是解码后的数组缺少原始数据的第一个索引和最终索引。
我尝试过使用不同的键和不同的数据集,结果都是一样的。
我一定是做错了什么,但我看不到。
干杯。
【问题讨论】:
-
请不要输入您的代码。复制并粘贴确切的代码,因为上面的代码甚至无法编译。
-
这里提示一下:你认为
engine.GetInputBlockSize();的值是多少?这是另一个提示。该值根据 RSA 引擎是处于加密模式还是解密模式而有所不同。 -
到目前为止,您这样做了吗?因为我遇到了同样的问题,可能需要你的建议:)
标签: c# encryption rsa bouncycastle