Aller au contenu
ecdsa.com
.NET System.Security.Cryptography.NET

Message d’erreur

System.Security.Cryptography.CryptographicException: ASN1 corrupted data.

Également affiché sous la forme

  • ASN1 corrupted data.
  • Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: ASN1 corrupted data.

Sous Linux et macOS, le type est `CryptographicException` ; sous Windows, il peut apparaître comme `WindowsCryptographicException` avec le même texte. L’exception interne indique par exemple « The provided data is tagged with 'Universal' class value '2', but it should have been 'Universal' class value '16'. »

.NET System.Security.Cryptography — ImportSubjectPublicKeyInfo / ImportPkcs8PrivateKey / ImportRSAPrivateKey / ImportECPrivateKey

Ce que cela signifie

Les octets passés à l’une des méthodes `Import…` ne sont pas la structure ASN.1 que décode cette méthode. Chaque méthode lit exactement une structure (PKCS#8, PKCS#1, SEC 1 ou SubjectPublicKeyInfo) et le DER extérieur ne correspond pas : .NET signale donc les données comme corrompues, alors que la clé elle-même est peut-être parfaitement correcte dans un autre format. L’exception interne `AsnContentException` indique la non-concordance de tag.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Utiliser ImportFromPem pour les fichiers PEM

    La méthode s’aiguille d’après l’étiquette PEM et vous évite de choisir à la main le mauvais décodeur DER. Les certificats passent plutôt par `X509Certificate2`.

    csharp
    // .NET 5+: ImportFromPem reads the label and picks the right decoder
    // (PRIVATE KEY, RSA PRIVATE KEY, EC PRIVATE KEY, PUBLIC KEY, RSA PUBLIC KEY).
    using var key = ECDsa.Create();
    key.ImportFromPem(File.ReadAllText("key.pem"));
  2. 2.

    Faire correspondre la méthode à la structure DER

    Si vous devez manipuler du DER brut, choisissez la méthode d’importation selon la nature des données ; un visualiseur ASN.1 vous indique quelle structure vous avez.

    csharp
    // DER input: choose the method by structure
    rsa.ImportPkcs8PrivateKey(der, out _);        // "PRIVATE KEY"
    rsa.ImportRSAPrivateKey(der, out _);          // "RSA PRIVATE KEY"
    rsa.ImportSubjectPublicKeyInfo(der, out _);   // "PUBLIC KEY"
    rsa.ImportRSAPublicKey(der, out _);           // "RSA PUBLIC KEY"
    ecdsa.ImportECPrivateKey(der, out _);         // "EC PRIVATE KEY"

Erreurs associées

Parcourir toute la base de données des erreurs de signature