HY, 我正在尝试加密节点中的文件并在C#中解密它。 要加密文件,我使用内部使用rsa-stream的Hybrid-rsa-stream,然后使用ManagedOpenSSL解密文件。 这是我的节点代码
var enc = rsa.encrypt(pubkey);
var out = fs.createWriteStream(path.join(localPath, "crypt-" + fileName), {flags: 'w'});
var input = fs.createReadStream(path.join(localPath, fileName));
input.pipe(enc).pipe(out);
由于我使用的是1024位密钥,模数长度应该是128个字节,我尝试将不同的模数长度设置为rsa.encrypt的参数,但是没有任何改变将其删除。 这是我的c#代码
CryptoKey cryptoKey = CryptoKey.FromPrivateKey(_privateKey, null);
RSA _rsa = cryptoKey.GetRSA();
BinaryReader br = new BinaryReader(File.Open(toDecrypt, FileMode.Open));
List<byte> result = new List<byte>();
while (br.BaseStream.Position != br.BaseStream.Length)
{
result.AddRange(_rsa.PrivateDecrypt(br.ReadBytes(_rsa.Size), RSA.Padding.None));
}
但是当我尝试解密文件时出现错误
错误:04065084:rsa例程:RSA_EAY_PRIVATE_DECRYPT:数据对于模数来说太大
我认为没有什么可以处理填充设置,我尝试改变它但没有改变。
私钥在末尾有一个nelinw字符(\ n),我尝试删除它但没有改变,
编辑:我注意到rsa.size的cripting块 - 1不会抛出任何错误,并且文件被写入,但它已损坏,我无法打开它
编辑2:问题似乎是hybrid-rsa-stream,它不会使用公钥来保存字节块,但是使用AES-256-CBC来保存所有文件并且他生成一个随机密钥,然后在操作结束时,hybrid-rsa-stream将随机生成的密钥与公钥加密。如何在c#中“恢复”此操作?