2010-11-26 6 views
1

J'essaie de créer une signature à partir d'une clé privée qui m'a été fournie et d'une valeur hachée. J'utilise DSA et le code suivant mais recevez l'erreur suivante:Comment créer une signature à partir d'une clé privée? - DSA

Type non valide spécifié. la source mscorlib

L'erreur est jeté sur cette ligne: 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 

Quelqu'un peut-il me dire si je suis sur la bonne voie ou Héré suis-je sortir?

Toute aide à ce sujet serait grandement appréciée.

Répondre

1

Vous utilisez, en tant que clé privée, un objet codé PEM dans un format qui est principalement spécifique à OpenSSL. A sa racine, il s'agit d'une structure basée sur ASN.1, encodée en DER, puis recodée en Base64 (pour la rendre compatible ASCII), et enfin équipée de quelques en-têtes (la "BEGIN DSA PRIVATE KEY"). D'autre part, ImportCsbBlob() s'attend à un tas d'octets compatibles avec ce CryptoAPI expects: un codage personnalisé, spécifique à Microsoft, des éléments clés DSA. J'ai utilisé beaucoup d'acronymes dans le paragraphe ci-dessus afin de souligner le fait que la conversion d'un codage à un autre est un problème complexe. Ces choses sont fortement stratifiées et très différentes les unes des autres.

This blob post semble indiquer que certaines versions très récentes de OpenSSL peuvent faire la conversion pour vous.

Questions connexes