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
Confusion entre PKCS#1 et PKCS#8 (ou SEC 1)
fréquenteDes octets `RSA PRIVATE KEY` passés à `ImportPkcs8PrivateKey`, ou des octets `PRIVATE KEY` passés à `ImportRSAPrivateKey`. Les structures diffèrent par leur premier élément (INTEGER ou SEQUENCE).
Texte PEM ou base64 passé comme du DER
fréquente`Encoding.ASCII.GetBytes(pem)` ou `Convert.FromBase64String` appliqué au fichier entier, lignes d’armure comprises, ne produit pas du DER.
Méthodes publiques et privées interverties
occasionnelleUne clé privée passée à `ImportSubjectPublicKeyInfo`, ou un certificat (et non une clé) passé à une méthode d’importation de clé, quelle qu’elle soit.
Comment corriger l’erreur
- 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.
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"