SignedData.Sign 方法

[ Sign 方法可用于“要求”部分中指定的操作系统。 请改用 System.Security.Cryptography.Pkcs 命名空间中的 SignedCms 类。]

Sign 方法对要签名的内容创建数字签名。 数字签名由要签名的内容的 哈希 组成,该哈希使用签名者的私钥进行加密。 此方法只能在初始化 SignedData.Content 属性后使用。 如果对已有签名的对象调用 Sign 方法,则会替换旧签名。 签名是使用 SHA1 签名算法创建的。

语法

SignedData.Sign( _
  [ ByVal Signer ], _
  [ ByVal bDetached ], _
  [ ByVal EncodingType ] _
)

参数

登录者 [in, 可选]

对数据的签名者的 Signer 对象的引用。 Signer 对象必须有权访问用于签名的证书私钥。 此参数可以为 NULL;有关详细信息,请参阅备注。

bDetached [in, optional]

如果 为 True,则分离要签名的数据;也就是说,已签名的内容不作为已签名对象的一部分包含在内。 若要验证分离内容上的签名,应用程序必须具有原始内容的副本。 如果已签名邮件的收件人具有已签名数据的原始副本,则分离内容通常用于减小要通过 Web 发送的已签名对象的大小。 默认值为 False

EncodingType [in, optional]

CAPICOM_ENCODING_TYPE 枚举的值,该值指示如何对带符号的数据进行编码。 默认值为 CAPICOM_ENCODE_BASE64。 此参数的取值可为下列值之一:

含义
CAPICOM_ENCODE_ANY
仅当输入数据具有未知编码类型时,才使用此编码类型。 如果使用此值指定输出的编码类型,则将改用CAPICOM_ENCODE_BASE64。 在 CAPICOM 2.0 中引入。
CAPICOM_ENCODE_BASE64
数据保存为 base64 编码的字符串。
CAPICOM_ENCODE_BINARY
数据保存为纯二进制序列。

 

返回值

此方法返回一个字符串,其中包含已编码的带符号数据。

如果此方法失败,将引发错误。 Err 对象将包含有关错误的其他信息。

备注

重要

从 Web 脚本调用此方法时,脚本需要使用私钥创建数字签名。 允许不受信任的网站使用私钥存在安全风险。 首次调用此方法时,将显示一个对话框,询问网站是否可以使用私钥。 如果允许脚本使用私钥创建数字签名并选择“不再显示此对话框”,则使用该私钥创建数字签名的域中的任何脚本将不再显示该对话框。 但是,该域外部尝试使用私钥创建数字签名的脚本仍会导致此对话框出现。 如果不允许脚本使用私钥并选择“不再显示此对话框”,则会自动拒绝该域中的脚本使用私钥创建数字签名。

 

由于创建 数字签名 需要使用 私钥,因此尝试使用此方法的基于 Web 的应用程序将需要用户界面提示,以允许用户批准使用私钥,出于安全原因。

以下结果适用于 Signer 参数值:

  • 如果 Signer 参数不为 NULL,则此方法使用关联证书指向的私钥来加密签名。 如果证书指向的私钥不可用,该方法将失败。
  • 如果 Signer 参数为 NULL ,并且CURRENT_USER MY 存储中恰好有一个证书有权访问私钥,则该证书用于创建签名。
  • 如果 Signer 参数为 NULL则 Settings.EnablePromptForCertificateUI 属性值为 true,并且CURRENT_USER MY 存储中有多个具有可用私钥的证书,将显示一个对话框,允许用户选择所使用的证书。
  • 如果 Signer 参数为 NULL ,并且 Settings.EnablePromptForCertificateUI 属性为 false,则该方法将失败。
  • 如果 Signer 参数为 NULL ,并且CURRENT_USER MY 存储中没有具有可用私钥的证书,则该方法将失败。

要求

要求
可再发行组件
Windows Server 2003 和 Windows XP 上的 CAPICOM 2.0 或更高版本
DLL
Capicom.dll

另请参阅

加密对象

SignedData