2017-09-08 7 views
3

Donc j'essaie d'obtenir un exemple de compilation à partir de .NET Core Api Docs ECDsaCng Class. J'ai compilé des erreurs à propos d'un assemblage. J'ai téléchargé .NET Core 2.0 puis ajouté une référence à C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0\System.Security.Cryptography.Cng.dll nouvellement installé et certains termes sont passés du noir au bleu clair montrant la reconception des jetons mais j'ai eu des erreurs de compilation, je suppose qu'il s'agit d'un problème de version..NET Core 2.0 Crypto échantillon ne fonctionne pas - Erreur Cng v4.3 utilise Algorithms v4.3 plus élevé que référencé Algorithms v4.2

J'ai recommencé à zéro après avoir installé .NET Core 2.0 en cas de doute. Il s'agit donc d'un projet créé récemment par l'Assistant Nouveau projet avec une nouvelle installation. Donc je suis coincé maintenant (je suis le genre de gars qui va fermer toutes les fenêtres et les ouvrir à nouveau).

Le code est donné ci-dessous. et un message d'erreur typique est donné sous la forme d'une citation en-dessous.

// https://docs.microsoft.com/en-gb/dotnet/api/system.security.cryptography.ecdsacng?view=netcore-2.0 
using System; 
using System.IO; 
using System.Security.Cryptography; 
using System.Text; 

//Added Dependencies/Reference to C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0\System.Security.Cryptography.Cng.dll; 

Namespace DotNetCoreEllipticCurveDigitalSignerConsl 
{ 
    class Alice 
    { 
     public static void Main(string[] args) 
     { 
      Bob bob = new Bob(); 
      using (ECDsaCng dsa = new ECDsaCng()) 
      { 
       dsa.HashAlgorithm = CngAlgorithm.Sha256; 
       bob.key = dsa.Key.Export(CngKeyBlobFormat.EccPublicBlob); 

       byte[] data = new byte[] { 21, 5, 8, 12, 207 }; 

       byte[] signature = dsa.SignData(data); 

       bob.Receive(data, signature); 
      } 
     } 


    } 
    public class Bob 
    { 
     public byte[] key; 

     public void Receive(byte[] data, byte[] signature) 
     { 
      using (ECDsaCng ecsdKey = new ECDsaCng(CngKey.Import(key, CngKeyBlobFormat.EccPublicBlob))) 
      { 
       if (ecsdKey.VerifyData(data, signature)) 
        Console.WriteLine("Data is good"); 
       Else 
        Console.WriteLine("Data is bad"); 
      } 
     } 
    } 
} 

Code de gravité Description du projet État Suppression de la ligne de fichier Erreur Assemblée CS1705 'System.Security.Cryptography.Cng' avec l'identité « System.Security.Cryptography.Cng, Version = 4.3.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a 'utilise ' System.Security.Cryptography.Algorithms, Version = 4.3.0.0, Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a' qui a une version supérieure que l'assemblage référencé ' System.Security.Cryptography. Algorithmes 'avec identité ' System.Secu rity.Cryptography.Algorithms, Version = 4.2.0.0, Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a » DotNetCoreEllipticCurveDigitalSignerConsl c: \ users \ Documents \ simon \ Visual Studio 2017 \ Projects \ DotNetCoreEllipticCurveDigitalSignerConsl \ DotNetCoreEllipticCurveDigitalSignerConsl \ CSC 1 actif

EDIT: Ajout de fichier csproj selon la demande dans les commentaires

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>netcoreapp1.1</TargetFramework> 
    </PropertyGroup> 

    <ItemGroup> 
    <Reference Include="System.Security.Cryptography.Cng"> 
     <HintPath>..\..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0\System.Security.Cryptography.Cng.dll</HintPath> 
    </Reference> 
    </ItemGroup> 

</Project> 

EDIT: Je fichier csproj modifié manuellement à TargetFramework netcoreapp2.0 selon ce blog Rick Strahl (MVP) Upgrading to .NET Core 2.0 Preview sur reoping le proje ct il y avait un délai un dans la sortie de la fenêtre Sortie du gestionnaire de paquets a déclaré Restoring NuGet packages... et la barre d'état a déclaré Installing Microswoft.NET.Core.App 2.0.0. Ensuite, l'erreur de compilation des squigglies rouges a disparu.

Et maintenant il compile, bonne nouvelle. Les mauvaises nouvelles sont maintenant il y a une erreur d'exécution

enter image description here

+0

Il est une application console par le façon. –

+0

Je ne pense pas que vous pouvez choisir un seul assemblage sur 2.0. Vous devez mettre à niveau l'ensemble de l'application vers un netstandard2.0 (ou netcoreapp2.0) pour obtenir tous les assemblages correctement. –

+0

@ChadNedzlek: il s'agit strictement du noyau .net car il doit éventuellement fonctionner sous Linux, même si je veux d'abord le faire fonctionner sur Windows 8.1 64 bits Pro. Aussi, si vous lisez le post, vous verrez que j'ai commencé le projet à partir de zéro, (via le menu standard et l'assistant suivant) après l'installation de .NET Core 2.0 et il a échoué. –

Répondre

3

J'ai créé une nouvelle application console .NET Core 2 sur une machine Windows 10, référencée System.Security.Cryptography.Cng en tant que paquet NuGet et copié votre code. J'ai obtenu un NullReferenceException. Le problème est, l'algorithme ECDSA ne semble pas connaître l'algorithme de hachage, car il ne reçoit pas de la clé publique ... Réglage cela fonctionne manuellement pour moi:

class Alice 
{ 
    public static void Main(string[] args) 
    { 
     Bob bob = new Bob(); 
     using (ECDsaCng dsa = new ECDsaCng()) 
     { 
      dsa.HashAlgorithm = CngAlgorithm.Sha256; 
      bob.key = dsa.Key.Export(CngKeyBlobFormat.EccPublicBlob); 

      byte[] data = new byte[] { 21, 5, 8, 12, 207 }; 

      byte[] signature = dsa.SignData(data); 

      bob.Receive(data, signature); 
     } 
    } 


} 
public class Bob 
{ 
    public byte[] key; 

    public void Receive(byte[] data, byte[] signature) 
    { 
     using (ECDsaCng ecsdKey = new ECDsaCng(CngKey.Import(key, CngKeyBlobFormat.EccPublicBlob))) 
     { 
      // set hash algorithm manually here 
      ecsdKey.HashAlgorithm = CngAlgorithm.Sha256; 
      if (ecsdKey.VerifyData(data, signature)) 
       Console.WriteLine("Data is good"); 
      else 
       Console.WriteLine("Data is bad"); 
     } 
    } 
} 
+2

Merci d'avoir obtenu ce travail . [Mention honorable à Scott] Je transmettrai l'amendement à Microsoft, c'est leur code de leur site de documentation. –

4

Vous ne devriez pas d'ajouter des références directes aux fichiers du SDK. Ce que vous devez faire est d'ajouter une référence au paquet System.Security.Cryptography.Cng, puis il va détecter que vous utilisez un paquet que vous avez localement et l'utiliser au lieu de télécharger une nouvelle copie.

+4

En fait, même après avoir corrigé la référence du paquet, sur mon mac, j'obtiens 'Exception non gérée: System.PlatformNotSupportedException: La cryptographie Windows Next Generation (CNG) n'est pas supportée sur cette plate-forme. à System.Security.Cryptography.ECDsaCng..ctor() à hwapp.Main (String [] args) dans /Users/viktorendokimov/experiments/netcore/hwapp/Program.cs:line 11' – vittore