存档

文章标签 ‘数字签名’

追加SHA-256数字签名

2018年3月27日 没有评论

相信做过windows桌面应用的开发人员或多或少都有听过数字签名这个概念,特别是对于稍微大点的企业,数字签名更是标配。

数字签名主要是有2个作用:

1、真实性。用户可以信任该软件的来源,因为数字签名需要花钱购买,对于一个真实有效的数字签名证书来说,是可以追索到其发行商的。

2、完整性。数字签名用来保护软件不被修改,因为一旦对二进制文件做了修改,其数字指纹就丢失了。通过检查数字签名,即可知道是否被修改过。

在过去,行业主要使用SHA-1来作为数字签名的算法,但是随着科技发展,该算法已经不再安全了,所以SHA-256算法就逐渐流行开来。经过衣服自己洗的观察,发现有的软件并非是直接使用SHA-256来代替,而是新增了一条记录。

有点意思,衣服自己洗猜测其目的,首先是“看起来”更可信,有2条记录,是不是感觉很牛x。然后,对于已经发行的软件,其验证数字签名的算法可能还不支持SHA-256,为了保持向前兼容,采用附加的方式。

具体的附加命令如下:.\signtool sign /as “http://www.ooxx.com/” /t “http://timestamp.comodoca.com/authenticode” /fd “SHA256” C:\CoreAPI.dll

对于直接覆盖,可以使用 /du 参数。

分类: 一句话, 日常 标签:

c#获取可执行代码文件的数字签名信息

2015年5月12日 没有评论

在最近的场景中,有遇到过在运行某个程序前,先对程序进行数字签名验证。如果通过则运行,否则不运行。
数字签名技术广泛用在 exe、dll 等二进制可执行文件中,防止文件被篡改,保证了文件的唯一性。一旦文件被修改,则数字签名丢失。

C#中对获取数字签名基本信息是很简单的,微软已经帮我们封装好了,首先添加引用using System.Security.Cryptography.X509Certificates;
然后就是普通的调用:

X509Certificate cert = X509Certificate.CreateFromSignedFile(path);
var s = cert.Subject;
MessageBox.Show(s);

效果如下所示:

cert

certdlg

当然,这只是一个初步的校验,即校验是否存在数字签名。至于数字签名是否合法则需要进一步去做校验。另外,对于CreateFromSignedFile方法,如果文件没有数字签名,那么会引发异常,所以代码里应该添加对该异常的处理。

分类: 一句话 标签: , ,