0

Je suis en train de mettre en œuvre cryptosystème hybride tel que mentionné dans https://en.wikipedia.org/wiki/Hybrid_cryptosystemImplémentation de système cryptographique hybride dans .net. Erreur clé spécifiée n'est pas une taille valide pour cet algorithme

Au moment où je l'ai mis en œuvre suivant algorithme

private void button1_Click(object sender, EventArgs e) 
     { 
      CspParameters cspParams = new CspParameters { ProviderType = 1 }; 
      RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams); 
      string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); 
      string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true)); 
      string symmericKey = "Kamran12"; 
      txtEncryptedData.Text = EncryptData(txtInputData.Text, symmericKey); 
      string encryptedsymmetrickey = EncryptData(symmericKey, publicKey); //error line 
      //string decryptsymmetrickey = encryptedsymmetrickey + privateKey; 

      //string decrypteddata = encryptedData + decryptsymmetrickey; 

     } 

     public string EncryptData(string data, string key) 
     { 
      string encryptedData = null; 

      byte[] buffer = Encoding.UTF8.GetBytes(data); 

      DESCryptoServiceProvider desCryptSrvckey = new DESCryptoServiceProvider 
      { 
       Key = new UTF8Encoding().GetBytes(key) 
      }; 
      desCryptSrvckey.IV = desCryptSrvckey.Key; 

      using (MemoryStream stmCipherText = new MemoryStream()) 
      { 
       using (CryptoStream cs = new CryptoStream(stmCipherText, desCryptSrvckey.CreateEncryptor(), CryptoStreamMode.Write)) 
       { 
        cs.Write(buffer, 0, buffer.Length); 
        cs.FlushFinalBlock(); 


        encryptedData = Encoding.UTF8.GetString(stmCipherText.ToArray()); 
       } 
      } 
      return encryptedData; 
     } 

Mais obtenir l'erreur clé spécifiée est pas une taille valide pour cet algorithme. au moment du cryptage de la clé symétrique

+0

Votre 'publicKey' est plus grand que les 64 bits autorisés qui sont attendus pour cette méthode de cryptage. C'est pourquoi vous obtenez l'exception. C'est 200 octets qui est 1600 bits. – BinaryFr3ak

+0

C'est un peu vrai, mais le fait que la mauvaise combinaison algorithme/clé est utilisée pour "envelopper" la clé DES en utilisant RSA est l'erreur sous-jacente. –

+0

Revoir la dernière version. Ceci est un site Q/A, pas un site de débogage. Ne mettez pas à jour votre code avec des solutions (partielles). –

Répondre

1

Vous essayez de crypter en utilisant l'algorithme DES (non sécurisé) avec une clé publique RSA. Cela va toujours échouer, DESCryptoServiceProvider n'accepte pas les clés RSA. Vous auriez besoin d'un RSACryptoServiceProvider pour cela.

Vous pouvez envisager d'utiliser une bibliothèque spécifique qui implémente déjà la cryptographie hybride (PGP, CMS ou l'un des protocoles propriétaires). La façon dont vous y allez votre solution peut fonctionner à la fin, mais elle ne sera pas sécurisée.

+1

DES en tant que chiffre. Tsk. –

+0

Pouvez-vous suggérer une correction dans la mise en œuvre actuelle. Impossible de trouver quelque chose sur github e.t.c concernant la cryptographie hybride –

+1

Je pensais que c'était évident, mais j'ai ajusté la réponse. Ne pas stringifier vos octets sauf si strictement requis. Les chaînes sont agréables pour un texte lisible par un humain; pas besoin de tout convertir en chaîne et en arrière tout le temps. Les clés DES doivent être codées en octets. –