加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#BouncyCastle RSA加密和解密

发布时间:2020-12-16 07:30:50 所属栏目:百科 来源:网络整理
导读:关于使用BouncyCastle的RSA加密和解密有很多主题,但是我遇到了一些意想不到的行为. 我正在尝试使用64字节大小的私钥加密64字节数据 我计算RSA加密如下: public byte[] Encrypt(byte[] data,AsymmetricKeyParameter key){ var engine = new RsaEngine(); eng
关于使用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,blockSize );
}

我使用公钥计算解密如下

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

我发现当我使用64字节私钥加密我的64位数据时,我得到了一个64字节的加密数据块.

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

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

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

干杯.

解决方法

你得到的基本概念是错误的.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读