c# - EPPlus - 如何删除数字签名
问题描述
我想从 VBA 签名的 excel 宏文件中删除数字签名。但是,当我查看 EPPlus 的库时,我看到“签名”属性是只读的,并且将证书设置为 null 似乎不会将其删除,只会使文件中的签名无效:
using (ExcelPackage xlPackage = new ExcelPackage(fiNew))
{
xlPackage.Workbook.VbaProject.Signature.Certificate = null;
xlPackage.Save();
}
调用 dispose 方法也不起作用,保存时出错。有人知道如何在 EPPlus 中执行此操作吗?
解决方案
查看源代码,只需提供没有私钥的证书 - 请参见第 137 行。
internal void Save(ExcelVbaProject proj)
{
if (Certificate == null)
{
return;
}
if (Certificate.HasPrivateKey==false) //No signature. Remove any Signature part
例如,您可以只使用 中的第一个证书Trusted Root Certificate Authorities
,它没有密钥,只要您没有在根证书颁发机构上运行,或者有人意外地引入了 PFX ......所以我们也对此进行过滤:
Trusted Root Certificate Authorities
这是从商店中读取的一些代码:
using (var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser)) {
store.Open(OpenFlags.ReadOnly);
var someCertWithoutPrivateKey =
store.Certificates
.Cast<X509Certificate2>()
.Where(c => !c.HasPrivateKey)
.FirstOrDefault();
}
推荐阅读
- android - 如何禁用单选按钮上的双击事件?
- javascript - 如何通过异步等待在严格模式下正确使用集合
- c++ - 报告定义的函数中的错误
- angular - 无法准备好未定义的属性
- python - 指定当月的最后一天 pandas .to_datetime()
- javascript - 如何替换外部js文件中的变量名
- google-cloud-platform - GCP Cloud SQL 的私有 IP 地址范围被忽略
- java - 为什么不同自定义类加载器加载的类不能互相调用
- google-bigquery - BigQuery Google 时区转换
- sqlite - 随机唯一整数在插入前避免重复