使用hybrid-rsa-stream在Nodej中进行加密,并使用OpenSSL在C#中进行解密

时间:2015-03-12 14:50:53

标签: c# php node.js encryption openssl

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#中“恢复”此操作?

0 个答案:

没有答案