バウンシーキャッスルを使用してRSAを実験しています。これは一般的な規則とは逆であることは知っていますが、私の理解では、理論的にはまだ機能するはずです。
RSA 秘密鍵を使用して一部のデータを暗号化します。暗号化されるデータの長さは 294 バイトです。暗号化関数は 512 バイトを出力します。次に、上記の出力暗号文と対応する公開鍵を渡して、復号化メソッドを呼び出します。私の問題は、暗号化関数への実際の入力が 294 バイトであるのに対し、復号化では常に 255 バイトのバッファーが返されることです。この理由は何ですか?
以下は、暗号化関数と復号化関数のソース コードです。
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;
}
}