转:关于VS.net的签名

具有强名称的程序集  网页中,我们可以看到以下描述:

  • 强名称依赖于唯一的密钥对来确保名称的唯一性。任何人都不会生成与您生成的相同的程序集名称 ,因为用一个私钥生成的程序集的名称与用其他私钥生成的程序集的名称不相同。

  • 强名称保护程序集的版本沿袭。强名称可以确保没有人能够生成您的程序集的后续版本 。用户可以确信,他们所加载的程序集的版本出自创建该版本(应用程序是用该版本生成的)的同一个发行者。

  • 强名称提供可靠的完整性检查。通过 .NET Framework 安全检查后,即可确信程序集的内容在生成后未被更改过 。但请注意,强名称中或强名称本身并不暗含信任级别,例如由数字签名和支持证书提供的信任。

    创建为ClickOnce清单签名的.pfx格式数字证书 
     使用vs2005自动创建的.pfx数字证书默认有效期只有一年,并且“颁发者”、“颁发给”均为当前机器名和当前登陆用户名的组合,其实我们完全可以创建更友好的.pfx数字证书。

    打开Microsoft .NET Framework 的SDK命令提示,按以下步骤操作:

    1、创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命令如下:

    makecert -r -n "CN= cncxz " -b 01/01/2005 -e 01/01/2018 -sv myselfName.pvk myselfName.cer

    按提示设置私钥密码(也可以不使用密码)即可在当前目录生成相关文件

    2、利用X.509证书(.cer)创建发行者证书 (.spc),用到cert2spc工具,命令如下:

    cert2spc myselfName.cer myselfName.spc

    3、从.pvk和.spc格式转换成.pfx格式,用到pvkimprt工具,命令如下:

    pvkimprt -pfx myselfName.spc myselfName.pvk

    按提示操作可导出.pfx证书,若第1步设置了私钥密码,此处需要输入验证

    4、在vs项目的ClickOnce清单签名的证书设置处点击“从文件选择”浏览定位到第3步导出的.pfx证书,此处需要验证第3步中设置的证书私钥密码。

    =================================================
    makecert工具和cert2spc工具.NET Framework自带,pvkimprt工具下载地址如下
    http://download.microsoft.com/download/vba50/Utility/1.0/NT5/EN-US/pvkimprt.exe

### 数字签名作用 数字签名在信息技术安全领域扮演着至关重要的角色。其主要功能在于确保信息的真实性和完整性,即确认消息确实来自声称的发送者,并且未被篡改。 #### 功能 1. **身份验证** 发送方通过私钥对数据进行签名处理,接收方可借助对应的公钥来检验该签名的有效性,从而证明文件确实是出自特定实体之手[^3]。 2. **不可否认性(Non-repudiation)** 由于只有持有相应私钥的人才能创建有效的数字签名,因此一旦某条记录被打上了这样的标记,则很难抵赖自己曾经发出过此信息[^1]。 3. **保持完整性** 当接收到带有数字签名的数据包时,可以通过重新计算哈希值并与原始附带的散列码对比,以此判断传输过程中是否有任何改动发生;即使是最微小的变化也会导致两者不匹配的结果出现[^4]。 然而值得注意的是,尽管数字签名能够提供上述保障措施,但它并不直接涉及通信双方间交换资料内容本身的机密性质维护——也就是说,除非额外采取诸如加密之类的手段加以保护,否则中间人仍可能截获并读取明文形式的消息体。 #### 应用场景 - **软件分发** 开发商可以在发布应用程序之前为其附加一个基于自身私钥生成的电子标签,使得最终用户安装前可轻松核对该程序是否来源于官方渠道以及中途有无遭受恶意修改的风险存在[^5]。 - **金融交易认证** 在线银行服务提供商通常会采用类似的机制让用户登录账户或者执行账指令之时提交由个人持有的硬件令牌所产生的动态口令作为辅助鉴权依据之一,进而增强整个流程的安全系数[^2]. - **法律文书签署** 如今越来越多的企业倾向于利用互联网平台完成合同签订工作,在这种情况下便可通过集成支持PKI体系架构下的API接口实现远程实名制下具有同等效力的手写笔迹效果模拟操作. ```java // Java代码示例:使用Java Security API 创建和验证XML文档中的数字签名 import java.security.*; import javax.xml.crypto.dsig.*; KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); keyGen.initialize(1024); KeyPair pair = keyGen.generateKeyPair(); Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(pair.getPrivate()); signature.update(data.getBytes()); byte[] realSig = signature.sign(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值