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

ほとんどが OpenSSL に固有の形式で、PEM でエンコードされたオブジェクトを秘密鍵として使用しています。ルートでは、ASN.1 ベースの構造であり、DER でエンコードされ、次に Base64 で再エンコードされ (ASCII 互換にするため)、最後にいくつかのヘッダー (「BEGIN DSA PRIVATE KEY」) が装備されています。一方、CryptoAPI が期待するImportCsbBlob()ものと互換性のある一連のバイトが期待されます: DSA キー要素の Microsoft 固有のカスタム エンコーディング。

あるエンコーディングから別のエンコーディングへの変換は複雑な問題であるという事実を強調するために、上記のパラグラフで非常に多くの頭字語を使用しました。それらは重く階層化されており、互いに非常に異なっています。

このブロブ投稿は、ごく最近のバージョンのOpenSSLが変換を実行できることを示しているようです。

于 2010-11-27T14:09:30.763 に答える