2010-04-19 4 views
2

Je suis en train de partager le cryptage entre Action Script etchiffrement Rijndael de Action Script à C#

C#

Ma tâche est de déchiffrer le message suivant dans C#

f1ca22a365ba54c005c3eb599d84b19c354d26dcf475ab4be775b991ac97884791017b12471000def05bb77bfe9c3a97d44ef78c9449f12daf6e25b61ab1a281

Il utilise Rijndael le chiffrage, la BCE mode (livre de code électronique), Clé: Pas5pr @ se, taille de la clé de 128 bits et taille du bloc.

Le problème que j'ai est que je ne peux pas sembler le faire, quelqu'un m'aider à ce sujet?

Répondre

7

Ceci est une implémentation de Rijndael Encryption que l'un de mes sites utilise actuellement. Voir si cela fait l'affaire:

using System; 
using System.IO; 
using System.Security.Cryptography; 
using System.Text; 

namespace CMS.Core.Domain 
{ 
    /// <summary> 
    /// Summary description for EncryptionManager 
    /// </summary> 
    public static class EncryptionManager 
    { 
     public static string EncryptRijndael(string value, string encryptionKey) { 
      try { 
       var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars 
       var rijndael = new RijndaelManaged { 
        BlockSize = 128, 
        IV = key, 
        KeySize = 128, 
        Key = key 
       }; 

       var transform = rijndael.CreateEncryptor(); 
       using (var ms = new MemoryStream()) { 
        using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write)) { 
         byte[] buffer = Encoding.UTF8.GetBytes(value); 

         cs.Write(buffer, 0, buffer.Length); 
         cs.FlushFinalBlock(); 
         cs.Close(); 
        } 
        ms.Close(); 
        return Convert.ToBase64String(ms.ToArray()); 
       } 
      } 
      catch { 
       return string.Empty; 
      } 
     } 

     public static string DecryptRijndael(string value, string encryptionKey) 
     { 
      try 
      { 
       var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars 
       var rijndael = new RijndaelManaged 
               { 
                BlockSize = 128, 
                IV = key, 
                KeySize = 128, 
                Key = key 
               }; 

       var buffer = Convert.FromBase64String(value); 
       var transform = rijndael.CreateDecryptor(); 
       string decrypted; 
       using (var ms = new MemoryStream()) 
       { 
        using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write)) 
        { 
         cs.Write(buffer, 0, buffer.Length); 
         cs.FlushFinalBlock(); 
         decrypted = Encoding.UTF8.GetString(ms.ToArray()); 
         cs.Close(); 
        } 
        ms.Close(); 
       } 

       return decrypted; 
      } 
      catch 
      { 
       return null; 
      } 
     } 
    } 
} 

Mise à jour

Une chose que je viens de remarquer avec votre entrée est que votre clé de chiffrement est seulement 9 caractères et mon code ci-dessus nécessite une clé de 16 caractères. Je ne suis pas sûr que ce soit une exigence stricte de l'algorithme de cryptage Rijndael, mais le code ci-dessus ne fonctionnera pas avec une clé de cryptage qui ne fait pas exactement 16 caractères.

+0

Votre processus semble simple et il fonctionne en C#, ne peut tout simplement pas recevoir le script d'action pour envoyer ou recevoir quoi que ce soit – Coppermill

+0

Vous ne savez pas comment vous aider avec l'aspect ActionScript de votre question, mais si cela était au moins un peu utile, s'il vous plaît vot e. :) –

+0

Cela me donne des erreurs 404.11, même après avoir codé le chemin en utilisant Url.Encode ou Uri.UrlPathEncode. – MyNameIsKo

0

Vous pouvez essayer this wrapper pour Rijndael comme il peut être un problème avec la IV ou le rembourrage de passphrase (I Pourrait être intéressé de savoir si cela ne fonctionne pas)

+0

C# est facile à coder, c'est le code ActionScript qui cause le plus gros problème – Coppermill