【发布时间】:2020-01-02 13:11:45
【问题描述】:
我有一个包含公钥的 p7b 文件,目标是用这个公钥加密一个 zip 文件并将文件更改为 .zip.encrypted 然后使用 .p12 文件对内容进行签名
问题
现在我正试图弄清楚这是如何工作的。这只是 pkcs#7 加密还是我称之为 CMS Evelope?由于在 p7b 文件中我只有一个公共 rsa 密钥,我如何能够用它加密整个 zip 文件?据我所知,您只能使用 RSA 加密来加密小字节。是否有某种字节流可用于自行加密 zip 文件的每个字节?或者我是否以某种方式从 p7b 文件的公共 RSA 密钥中生成 AES 密钥?我是否需要将 p7b 证书添加到我的 windows 帐户才能访问里面的数据?
我的尝试
我尝试了 .net 资源,但无法弄清楚如何获得我想要的东西,然后我在谷歌上搜索了很多,发现了很多人们如何加密短字符串并尝试适应的例子,但它从来没有为我工作。
现在我正在为 c# 使用 Bouncy Castle,我想当我尝试加密一个普通的短字符串时,我能够从我的 p7b 文件中读取公钥,它似乎可以工作。但是当我使用我的 zip 文件时,我得到一个异常,即我的字节数组太大。我用于此测试的 zip 文件只有 3KB,以后的真实文件将高达 ~200MB
所以我猜我使用 p7b 文件以及充气城堡来解决我的问题的方式是错误的。
我的代码
var p7bFilePath = @"key\Test.p7b";
var text = @"zipfile";
var bytesToEncrypt = File.ReadAllBytes(@"zip\test.zip");
var certi = ReadCertificate(p7bFilePath);
var encodedPublicKey = certi.GetPublicKey();
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
encryptEngine.Init(true, encodedPublicKey);
var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
Console.WriteLine(encrypted);
【问题讨论】:
标签: c# bouncycastle pkcs#7 pkcs#12