Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#BouncyCastle RSA加密和解密_C#_Encryption_Rsa_Bouncycastle - Fatal编程技术网

C#BouncyCastle RSA加密和解密

C#BouncyCastle RSA加密和解密,c#,encryption,rsa,bouncycastle,C#,Encryption,Rsa,Bouncycastle,有很多关于使用BouncyCastle进行RSA加密和解密的主题,但是我遇到了一些意想不到的行为 我正在尝试使用大小为64字节的私钥加密64字节的数据块 我计算RSA加密如下: public byte[] Encrypt(byte[] data, AsymmetricKeyParameter key) { var engine = new RsaEngine(); engine.Init(true, key); var blockSize = engine.GetInpu

有很多关于使用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位

  • 你应该后退一步,描述一下你真正想要实现的目标,这样我们才能找到一个适合你需要的方案。只有在这之后,您才应该担心如何实现它。

    请不要键入代码。复制并粘贴精确的代码,因为上面的代码甚至没有编译。这里有一个提示:
    engine.GetInputBlockSize()的值是多少是什么?这是另一个提示。根据RSA引擎处于加密模式还是解密模式,该值会有所不同。到目前为止,您是否已经这样做了?因为我遇到了同样的问题,可能需要您的建议:)我同意您的说法,但是:1。)我正在使用的接口需要使用512位RSA密钥。2.)我使用的接口执行公钥解密,因此需要私钥加密。3.)使用的填充在加密之前预先计算,因为使用了自定义填充方案。