1

我正在尝试从我提供的私钥和散列值创建签名。我正在使用 DSA 和以下代码,但收到以下错误:

指定的类型无效。源 mscorlib

此行引发错误:ImportCspBlob(pk)

 Private Function key() As String

        Dim privatekey As String = "-----BEGIN DSA PRIVATE KEY-----" _
        & "Key Data"
        & "-----END DSA PRIVATE KEY-----"

        Dim dsa As DSACryptoServiceProvider = New DSACryptoServiceProvider()
        Dim pk As Byte() = Encoding.ASCII.GetBytes(privatekey)

        dsa.ImportCspBlob(pk)
        Dim st As Byte() = Encoding.ASCII.GetBytes("THIS IS THE HASH STRING")))
        Dim signedValue As Byte() = dsa.SignHash(st, "SHA1")

        Return Encoding.ASCII.GetString(signedValue)

    End Function

谁能告诉我我是在正确的路线上还是我出路了?

对此的任何帮助将不胜感激。

4

1 回答 1

1

您正在使用 PEM 编码的对象作为私钥,其格式主要针对 OpenSSL。从根本上讲,它是一个基于 ASN.1 的结构,在 DER 中编码,然后在 Base64 中重新编码(使其与 ASCII 兼容),最后配备一些标头(“BEGIN DSA PRIVATE KEY”)。另一方面,ImportCsbBlob()期望一堆与CryptoAPI 期望兼容的字节:DSA 关键元素的自定义、Microsoft 特定编码。

我在上面的段落中使用了很多首字母缩略词,以强调从一种编码转换为另一种编码一件复杂的事情。这些东西层次分明,彼此非常不同。

这篇 blob 帖子似乎告诉您,一些最新版本的OpenSSL可以为您进行转换。

于 2010-11-27T14:09:30.763 回答