2008-10-09 6 views
0

J'ai une chaîne .NET qui est la représentation codée Base64 d'un tableau d'octets cryptés. Il est produit comme celui-ci:Utilisation de FromBase64Transform avec CryptoStream?

String Encrypt(String message) 
{ 
    CryptoStream cryptostream = ... 
    StreamWriter stream = new StreamWriter(cryptostream); 
    ... 
    return Convert.ToBase64String(...); 
} 

Maintenant, je veux une fonction de décryptage comme

String Decrypt(String cypher) 
{ 
    TextReader reader = new StringReader(cypher); 
    byte[] buffer = new byte[ cypher.Length ]; 
    for(int i = 0; i < cypher.Length; ++i) 
    { 
     buffer[ i ] = (byte) reader.Read(); 
    } 
    FromBase64Transform transformer = new FromBase64Transform(); 
    MemoryStream raw = new MemoryStream 
    ( 
     transformer.TransformFinalBlock(buffer, 0, buffer.Length) 
    ); 
    ... 
} 

Y at-il un moyen d'utiliser FromBase64Transform directement avec CryptoStream (comme la documentation .NET suggère), au lieu de convertir manuellement la chaîne en octets, puis décoder manuellement les octets et enfin décrypter les octets décodés?

Répondre

1

Je toujours la classe Convert pour convertir la chaîne en un tableau de Byte.

Un exemple:

public static string DeCryptString(string s) { 
     byte[] b = System.Convert.FromBase64String(s); 

     using (MemoryStream ms = new MemoryStream(b)) 
     using (CryptoStream cs = /* Create decrypting stream here */) 
     using (StreamReader sr = new StreamReader(cs)) { 
      string buf = sr.ReadToEnd(); 
      return buf; 
     } 
    } // DeCryptString 
+0

En fait, peut être initialisé le flux de mémoire directement à l'aide du tableau d'octets renvoyé par Convert dans cet exemple. Cela évite les appels à Écrire et Chercher. –

+0

@Jerome, merci, J'ai modifié l'exemple en fonction de votre conseil. En le relisant, je ne sais même pas pourquoi je l'ai fait de façon compliquée. – GvS

0

Il n'existe aucun moyen public intégré de diffuser à partir d'une chaîne, à partir de .NET 3.5.

Vous pouvez implémenter une classe StringStream simple qui hérite de Stream, ce qui vous évite d'avoir à convertir la chaîne en un tableau d'octets.