MemoryStream à la Chaîne, et de retour à MemoryStream sans ajout de tous les octets (encodages, etc.)

OK, je suis tombé sur quelques articles ici et ici, mais ils ne font pas tout à fait ce que je dois faire, et je suis en cours d'exécution dans un certain ennui.

Je reçois un élément crypté de données comme un memorystream. J'ai besoin de quelque sorte écrire memorystream à un fichier (la façon dont j'ai écrit la maquette, comme une chaîne de caractères serait le mieux), puis récupérer la chaîne de caractères à partir du fichier et de l'envoyer, comme un memorystream, à un service à être déchiffré. J'étais juste à l'aide d'un streamreader pour stocker les memorystream comme une chaîne de caractères, et a été la lecture de la chaîne en mémoire à l'aide d'un codage.

Le problème est que j'ai une erreur disant que mes données chiffrées a été endommagé. Je pense que cela signifie que j'ai changé les octets, en quelque sorte.

Voici le code de lecture memorystream dans une chaîne de caractères:

using (StreamReader reader = new StreamReader(dataKeyResponse.CiphertextBlob))
{
    encryptedDataKey = reader.ReadToEnd();
}

Et voici le code de lecture de la chaîne, récupérées à partir du fichier, dans un memorystream:

MemoryStream mStream = new MemoryStream(ASCIIEncoding.Default.GetBytes(encryptedKey));

J'ai pensé que l'étape qu'il a fait était le ASCIIEncoding, mais ensuite j'ai mis en place la solution de contournement à partir de ci-dessus, converti le tableau d'octets à un memorystream, et a obtenu le même message d'erreur.

byte[] bytes = new byte[encryptedKey.Length*sizeof (char)];
System.Buffer.BlockCopy(encryptedKey.ToCharArray(), 0, bytes, 0, bytes.Length);

string decryptedKey;
using (MemoryStream mStream = new MemoryStream())
{
    mStream.Write(bytes, 0, bytes.Length);
    var decryptRequest = new DecryptRequest()
    {CiphertextBlob = mStream};
    var decryptResponse = client.Decrypt(decryptRequest);
    using (StreamReader reader = new StreamReader(decryptResponse.Plaintext))
    {
        decryptedKey = reader.ReadToEnd();
    }
}

Je suis en supposant que (1) qu'il y a quelque chose de changer les données d'une certaine façon et pas d'une autre erreur; (2) qu'il est dans le flux de données -> string ou string -> flux de transition, et non pas de la chaîne -> fichier ou de la chaîne <- fichier de transition; et (3) une copie parfaite des données entrantes et sortantes va résoudre le problème, les données entrant est censé être un "texte" version cryptée; peut-être il ya un espoir que je encoder le flux entrant et sortant (ne encodage de même modifier les données? Je suis en juger par les post qu'il n').

Soit une confirmation que les octets doivent être équivalent entrer et sortir, ou un moyen de capturer la memorystream dans un fichier et l'envoyer en arrière, sans rien changer serait génial.

Ne pas enregistrer les binaires (sans texte) données sous forme de chaîne. Il n'y a pas de point. Juste le traiter comme un flux d'octets.
Voici comment enregistrer/charger un memorystream: stackoverflow.com/questions/8624071/...
Vous ne pouvez pas stocker arbitraire d'octets en tant que chaînes car chaînes ont des règles et à l'arbitraire d'octets n'est pas. Vous devez coder les octets d'une certaine manière (par exemple Base64) ou de stocker des octets brutes, pas de chaînes.
Memorystream est une clé chiffrée, tandis que les données qui ont été chiffrées à l'aide de la clé est une chaîne cryptée. Si memorystream est enregistré comme une chaîne de caractères, je peux enregistrer à la fois la clé chiffrée et les données chiffrées que les deux chaînes dans le même fichier. Je ne sais pas comment je pourrais enregistrer une chaîne à côté d'un memorystream et de lire que revenir en arrière...et puisque c'est juste une preuve de concept, il fait rapidement, c'est ce qui est important en ce moment...est-il possible d'enregistrer une chaîne à côté d'un flux de mémoire dans le même fichier?
“Si memorystream est enregistré comme une chaîne de caractères”; eh bien, si 32 a été supérieure à 128, vous pourriez économiser un decimal dans un int. Mais il n'est pas, et vous ne pouvez pas.

OriginalL'auteur bordeo | 2015-05-28