C # octet Split tableau []

voix
3

Je suis en train de faire le cryptage RSA et je dois diviser ma longue chaîne en petit octet [] et les chiffrer. Je combine alors les tableaux et les convertir en chaîne et écrire dans un fichier sécurisé.

Ensuite, le chiffrement crée octet [128]

J'utilise ce qui suit pour combiner:

public static byte[] Combine(params byte[][] arrays)
{
    byte[] ret = new byte[arrays.Sum(x => x.Length)];
    int offset = 0;
    foreach (byte[] data in arrays)
    {
        Buffer.BlockCopy(data, 0, ret, offset, data.Length);
        offset += data.Length;
    }
    return ret;
}

Quand je prends la décrypter je chaîne, le convertir en un octet tableau [] et maintenant besoin de le diviser pour décoder les morceaux et ensuite convertir en chaîne.

Des idées?

Merci

MODIFIER:

Je pense que je le partage travaille maintenant mais le décryptage échoue. Est-ce à cause de clés RSA etc? A TimePointA il encrypte, puis à TimePointB il essaie de décrypter et il échoue. Les clés publiques sont différentes donc je ne sais si c'est la question.

Créé 22/07/2009 à 07:47
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
0

Pourquoi avez-vous besoin de briser la chaîne en morceaux de longueur variable? morceaux de longueur fixe, ou pas du tout morceaux, simplifieraient ce lot.

Créé 22/07/2009 à 07:54
source utilisateur

voix
3

Lorsque vous déchiffrez, vous pouvez créer un tableau pour votre tampon Décrypter et le réutiliser:

En outre, normalement RSA se sert à chiffrer une clé symétrique pour quelque chose comme AES, et l'algorithme symétrique est utilisé pour chiffrer les données réelles. Ceci est considérablement plus rapide pour quoi que ce soit plus long que 1 bloc de chiffrement. Pour décrypter les données, vous décryptez la clé symétrique avec RSA, suivi de décryptage des données avec cette clé.

byte[] buffer = new byte[BlockLength];
// ASSUMES SOURCE IS padded to BlockLength
for (int i = 0; i < source.Length; i += BlockLength)
{
    Buffer.BlockCopy(source, i, buffer, 0, BlockLength);
    // ... decode buffer and copy the result somewhere else
}

Edit 2: Si vous stockez les données sous forme de chaînes et non comme octets bruts, l' utilisation Convert.ToBase64String()et Convert.FromBase64String()la solution de conversion la plus sûre.

Edit 3: A partir de son édition:

private static List<byte[]> splitByteArray(string longString)
{
    byte[] source = Convert.FromBase64String(longString);
    List<byte[]> result = new List<byte[]>();

    for (int i = 0; i < source.Length; i += 128)
    {
        byte[] buffer = new byte[128];
        Buffer.BlockCopy(source, i, buffer, 0, 128);
        result.Add(buffer);
    }
    return result;
}
Créé 22/07/2009 à 07:56
source utilisateur

voix
3

Je dirais que quelque chose comme ça le ferait:

        byte[] text = Encoding.UTF8.GetBytes(longString);
        int len = 128;

        for (int i = 0; i < text.Length; )
        {
            int j = 0;
            byte[] chunk = new byte[len];
            while (++j < chunk.Length && i < text.Length)
            {
                chunk[j] = text[i++];
            }
            Convert(chunk); //do something with the chunk
        }
Créé 22/07/2009 à 07:56
source utilisateur

voix
0

« Les clés publiques sont différentes »?

Vous chiffrez avec une clé privée et décryptez avec la clé publique correspondant à la clé privée.

Rien d'autre vous donnera du charabia.

Créé 22/07/2009 à 08:01
source utilisateur

voix
0

pourquoi ne pas utiliser un cadre au lieu de faire vous-même octet choses?

http://www.codinghorror.com/blog/archives/001275.html

Créé 22/07/2009 à 09:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more