Question

Je ne suis pas un expert en crypto, mais si j'ai bien compris, 3DES est un algorithme de cryptage symétrique, ce qui signifie qu'il n'utilise pas de clé publique / privée.

Néanmoins, j'ai été chargé de chiffrer des données à l'aide d'une clé publique (en particulier un fichier .CER). Si vous ignorez l'intégralité du thang symétrique / asymétrique, je devrais pouvoir utiliser les données de clé de la clé publique comme clé TripleDES. Toutefois, je ne parviens pas à extraire les octets de clé du fichier .CER. C’est le code tel qu’il est écrit.

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

La méthode la plus simple que je puisse trouver pour extraire les octets de clé bruts du certificat est ToXmlString (bool), puis en effectuant quelques sous-chaînes malicieuses sur la chaîne renvoyée. Cependant, cela semble tellement ridicule que j’ai le sentiment qu’il me manque une manière plus simple et plus évidente de le faire.

Me manque-t-il d'un moyen plus simple d'utiliser un fichier .cer pour fournir les données de clé à la classe de cryptage C # 3DES, ou le piratage de la chaîne de certificat xml est-il vraiment la meilleure solution?

Était-ce utile?

La solution

cryptoProvider.Key = cert.GetPublicKey ()?

Autres conseils

Ce n’est pas une bonne idée d’utiliser des clés générées pour la cryptographie asymétrique pour la cryptographie symétrique. Rien ne vous empêche de trouver un moyen d'utiliser une clé publique comme clé de chiffrement pour 3DES, mais le résultat final sera que toute personne ayant accès à la clé publique (et cela signifie que tout le monde!) Sera en mesure de déchiffrer votre texte chiffré. .

Le cryptage asymétrique n’est pas la solution. Au lieu de cela, chiffrez les données avec un algorithme symétrique et chiffrez la clé symétrique (et IV) avec votre clé publique.

Cette page de MSDN vraiment m'a aidé à démarrer avec la cryptographie .Net symétrique.

Le vrai problème ici est que la clé publique est bien publique . Ce qui signifie librement disponible, c'est-à-dire qu'il n'offre aucune sécurité de cryptage.

Heck, n'importe qui sur ce fil a toutes les informations nécessaires pour tout déchiffrer. Tout comme les googlers.

Essayez d’encourager vos utilisateurs à ne pas utiliser de telles données à clé publique. À tout le moins, demandez-leur de donner un mot de passe ou un autre morceau légèrement plus sécurisé que vous pouvez utiliser pour générer une clé cohérente.

Une dernière chose. Les clés de certificat varient en taille. Il peut probablement gérer l'élimination d'octets supplémentaires dans la clé, mais vous obtiendrez probablement une exception Array Index / Out Of Bounds si la clé est plus courte que la clé 3DES. Je doute que cela se produise, 3DES n’a besoin que de 56 bits et les clés de certification ont presque toujours 256 bits ou plus.

Je pense que ce qui vous manque, c'est de convertir les octets de la chaîne contenant les octets de clé.

J'espère que la méthode FromBase64String vous aidera à:

byte[] keyBytes = Convert.FromBase64String(sourceString);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top