0

我正在使用充气城堡对 RSA 进行实验。我知道这是一般惯例的另一种方式,但据我所知,它仍然应该在理论上起作用。

我使用 RSA 私钥加密了一些数据。被加密的数据长度为 294 字节。加密函数输出 512 个字节。然后我通过传递上面的输出密文和相应的公钥来调用解密方法。我的问题是解密总是返回一个 255 字节的缓冲区,而 Encryption 函数的实际输入是 294 字节。这可能是什么原因?

下面是加解密函数的源码。

public static byte[] RSAEncrypt(byte[] data, AsymmetricKeyParameter key)
        {
            try
            {
                RsaEngine e = new RsaEngine();
                e.Init(true, key);

                int blockSize = e.GetInputBlockSize();

                List<byte> output = new List<byte>();

                for (int chunkPosition = 0; chunkPosition < data.Length; chunkPosition += blockSize)
                {
                    int chunkSize = Math.Min(blockSize, data.Length - (chunkPosition * blockSize));
                    output.AddRange(e.ProcessBlock(data, chunkPosition, chunkSize));
                }

                return output.ToArray();
            }
            catch (Exception ex)
            {

                return null;
            }
        }


public static byte[] RSADecrypt(byte[] data, AsymmetricKeyParameter key)
        {
            try
            {
                RsaEngine e = new RsaEngine();
                e.Init(false, key);

                int blockSize = e.GetInputBlockSize();

                List<byte> output = new List<byte>();

                for (int chunkPosition = 0; chunkPosition < data.Length; chunkPosition += blockSize)
                {
                    int chunkSize = Math.Min(blockSize, data.Length - (chunkPosition * blockSize));
                    output.AddRange(e.ProcessBlock(data, chunkPosition, chunkSize));
                }

                return output.ToArray();
            }
            catch (Exception ex)
            {

                return null;
            }
        }
4

1 回答 1

2

RSA 是一种非对称加密方法,它加密的数字小于 RSA 密钥的模数(255 字节表示您使用的是 256*8 = 2048 位 RSA 密钥/模数)

要加密大于该值的值,您需要做的是生成密钥,使用对称密码加密数据(AES 不是一个坏选择)并使用您的私有 RSA 密钥加密 AES 密钥(最好与其他一些随机数据一起)。

AES 密钥最大为 256 位,可以使用 RSA 加密,并且 AES 没有大小限制。

于 2013-04-28T07:07:12.163 回答