J'ai un algorithme pour crypter et décrypter les données en utilisant le cryptage symétrique. de toute façon quand je suis sur le point de décrypter, j'ai:
CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read);
Je dois lire les données du cs CryptoStream et placer ces données dans un tableau d'octets. Une méthode pourrait donc être:
System.Collections.Generic.List<byte> myListOfBytes = new System.Collections.Generic.List<byte>();
while (true)
{
int nextByte = cs.ReadByte();
if (nextByte == -1) break;
myListOfBytes.Add((Byte)nextByte);
}
return myListOfBytes.ToArray();
une autre technique pourrait être:
ArrayList chuncks = new ArrayList();
byte[] tempContainer = new byte[1048576];
int tempBytes = 0;
while (tempBytes < 1048576)
{
tempBytes = cs.Read(tempContainer, 0, tempContainer.Length);
//tempBytes is the number of bytes read from cs stream. those bytes are placed
// on the tempContainer array
chuncks.Add(tempContainer);
}
// later do a for each loop on chunks and add those bytes
Je ne peux pas savoir à l'avance la longueur du flux cs:
ou peut-être devrais-je implémenter ma classe de pile. Je vais crypter beaucoup d'informations donc rendre ce code efficace vous fera gagner beaucoup de temps
Vous pouvez lire en morceaux:
using (var stream = new MemoryStream())
{
byte[] buffer = new byte[2048]; // read in chunks of 2KB
int bytesRead;
while((bytesRead = cs.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, bytesRead);
}
byte[] result = stream.ToArray();
// TODO: do something with the result
}
Comme vous stockez tout dans la mémoire de toute façon, vous pouvez simplement utiliser un MemoryStream
et CopyTo()
:
using (MemoryStream ms = new MemoryStream())
{
cs.CopyTo(ms);
return ms.ToArray();
}
CopyTo()
nécessitera .NET 4