如何从私钥创建签名? - DSA

时间:2010-11-26 13:36:42

标签: .net vb.net dsa

我正在尝试使用我提供的私钥和散列值创建签名。我使用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

任何人都可以告诉我,如果我在正确的路线上,或者我是出路吗?

对此的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

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

我在上面的段落中使用了大量的首字母缩略词,以强调从一个编码转换为另一个的事实是一件复杂的事情。这些东西层次分明,彼此差异很大。

This blob post似乎告诉我们OpenSSL的一些最新版本可以为您进行转换。