我正在尝试使用我提供的私钥和散列值创建签名。我使用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
任何人都可以告诉我,如果我在正确的路线上,或者我是出路吗?
对此的任何帮助都将非常感激。
答案 0 :(得分:1)
您正在使用一种PEM编码对象作为私钥,该格式主要针对OpenSSL。从根本上说,它是一个基于ASN.1的结构,用DER编码,然后在Base64中重新编码(使其与ASCII兼容),最后配备一些标题(“BEGIN DSA PRIVATE KEY”)。另一方面,ImportCsbBlob()
期望一堆字节与CryptoAPI expects兼容:DSA关键元素的自定义,特定于Microsoft的编码。
我在上面的段落中使用了大量的首字母缩略词,以强调从一个编码转换为另一个的事实是一件复杂的事情。这些东西层次分明,彼此差异很大。
This blob post似乎告诉我们OpenSSL的一些最新版本可以为您进行转换。