2017-07-06 1 views
0

Mon programme génère une clé AES, la crypte avec l'algorithme rsa et l'envoie au serveur. Mais quand je l'ai récupéré du serveur et décrypté certains octets sont devenus corrompus et remplacés par une séquence 239 191 189 Selon cette question UTF-8 Encoding and decoding issue J'ai réalisé que le problème est que le serveur (qui déchiffre aussi la clé) le stocke en tant que chaîne UTF-8. Est-il possible de créer des clés "UTF-8 friendly"? Voici comment générer des clés:Convertir le château gonflable aes en UTF-8 string

 IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS7Padding"); 
     CipherKeyGenerator aesKeyGenerator = new CipherKeyGenerator(); 
     var rand = new SecureRandom(); 
     aesKeyGenerator.Init(new KeyGenerationParameters(rand, 256)); 
     byte[] key = aesKeyGenerator.GenerateKey(); 
     var aesKey = ParameterUtilities.CreateKeyParameter("AES", _key); 
     var iv = new byte[32]; 
     rand.NextBytes(iv); 
     ParametersWithIV aesKeyParam = new ParametersWithIV(aesKey, iv); 
+1

Une clé générée n'est probablement pas du texte, mais un tableau d'octets. Au moins, ça devrait l'être. N'essayez pas de convertir la clé directement en UTF-8. Au lieu de convertir les octets de clé en caractères en utilisant Base64. Bien sûr, vous aurez besoin de convertir le Base64 en octets originaux avant de l'utiliser comme une clé. – rossum

Répondre

3

Votre clé AES est constituée de bits/octets. SI vous voulez l'afficher, vous pouvez convertir les octets alors vous devriez probablement utiliser un codage hexadécimal de ces octets. Généralement, vous n'avez pas besoin de le faire: les clés AES doivent rester binaires.

Seulement pendant le débogage est-il logique de convertir en hexadécimaux. Comme il s'agit d'un matériau clé, il est également judicieux de supprimer ces lignes une fois que le code est fonctionnel - vous pouvez effectuer des tests unitaires avec des clés de test pour vérifier l'exactitude.

Il -t un sens pour convertir le RSA crypté clé de base 64 si vous avez besoin d'envoyer la clé cryptée sur une interface texte (SOAP, JSON, XML, peu importe). Inutile de dire que vous devez le convertir en binaire dès réception de la clé enveloppée (c'est-à-dire cryptée).