2017-09-07 4 views
0

Je reçois des erreurs de décodage de la clé privée à l'aide du mot de passe de la clé privée entré dans ma classe C#. Je suppose que le problème est dû au fait que la clé est:Clé privée de décodage C# Bouncy Castle

  1. Lecture à partir d'un fichier texte comportant des caractères de retour à la ligne.
  2. La clé privée n'a pas été créée à l'aide de cette bibliothèque, donc je ne la décode peut-être pas correctement.
  3. On ne sait pas quel est le remplissage du système qui a généré cette clé (en particulier, il est généré à partir d'une librairie Ruby Security).

L'exception est lancée

Org.BouncyCastle.Crypto.InvalidCipherTextException

avec le message

bloc pad

corrompu

passe en ligne object privateKeyObject = pemReader.ReadObject();

Voici une clé privée échantillon fourni pour moi:

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,C7E12029C6ED8D89 

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 
-----END RSA PRIVATE KEY----- 

est ici le mot de passe clé privée:

SPH?!(C7ryh~juR> 

Voici le code:

private readonly string _pubKey; 
private readonly string _privateKey; 
private readonly string _privateKeyPass; 

public RSAKeyEncryption(string pubKey, string privateKey, string privateKeyPass) 
{ 
    _pubKey = pubKey; 
    _privateKey = privateKey; 
    _privateKeyPass = privateKeyPass; 
} 

private AsymmetricCipherKeyPair DecodePrivateKey() 
{ 
    TextReader textReader = new StringReader(_privateKey); 
    PemReader pemReader = new PemReader(textReader, new PasswordFinder(_privateKeyPass)); 
    object privateKeyObject = pemReader.ReadObject(); 
    AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)privateKeyObject; 
    return keyPair; 
} 
+0

J'ai essayé d'afficher votre clé avec 'openssl pkey -in key.pem' et j'ai obtenu' impossible de charger la clé'. Je suppose que vous avez un caractère Unicode dans votre mot de passe. Si possible, vous pouvez essayer un pur mot de passe 'ASCII' où tous les caractères ont des codes entre 0x20 et 0x7E. –

+0

@AxelKemper désolé, la clé est SPH?! (C7ryh ~ juR> – blgrnboy

+0

Avec la clé 'SPH?! (C7ryh ~ juR>', openssl peut charger votre clé sans message d'erreur –

Répondre

1

Le code suivant a fonctionné pour moi:

// https://stackoverflow.com/a/6038944/1911064 
StreamReader sr = new StreamReader(@"E:\AK\temp\key.pem"); 
string privateKeyPass = "SPH?!(C7ryh~juR>"; 
var pf = new PasswordFinder(privateKeyPass); 
PemReader pr = new PemReader(sr, pf); 
AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject(); 
RSAParameters rsa = 
     DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private); 
+0

Le problème était double: Premièrement, j'avais ce caractère unicode '\ uxxx', c'est ainsi que le mot de passe m'a été fourni par erreur au lieu de'> ', et aussi , parce que le mot de passe était en train d'être lu à partir d'un fichier texte, il avait un retour à la ligne '\ n' à la fin de celui-ci, je devais m'assurer de le supprimer s'il existait. – blgrnboy