C# Split byte[] tableau
Je suis en train de faire le cryptage RSA, et je dois partager ma longue chaîne dans les petites byte[] et les chiffrer. J'ai ensuite combiner les tableaux et le convertir en chaîne de caractères et écrire dans un fichier sécurisé.
Le chiffrement crée byte[128]
Je l'utiliser à la suite de 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 j'déchiffrer-je prendre de la chaîne, de la convertir en un byte[] tableau et maintenant besoin de le diviser pour décoder les morceaux et ensuite de les convertir en chaîne de caractères.
Des idées?
Grâce
EDIT:
Je pense que j'ai le split de travail maintenant toutefois le déchiffrement échoue. Est-ce à cause de clés RSA etc? Au TimePointA il crypte, puis à TimePointB il tente de déchiffrer et il échoue. Les clés publiques sont différentes, donc pas sûr si c'est la question.
OriginalL'auteur Jon | 2009-07-22
Vous devez vous connecter pour publier un commentaire.
Lorsque vous déchiffrer, vous pouvez créer un tableau pour votre décrypter tampon et le réutiliser:
Aussi, normalement RSA est utilisé pour chiffrer une clé symétrique pour quelque chose comme AES, et l'algorithme symétrique est utilisée pour chiffrer les données réelles. C'est énormément plus rapide pour rien plus de 1 cipher block. Pour décrypter les données, vous déchiffrer la clé symétrique avec RSA, suivie de déchiffrer les données à l'aide de cette clé.
Edit 2: Si vous stockez les données comme des chaînes de caractères et non pas comme des brutes octets, utilisez
Convert.ToBase64String()
etConvert.FromBase64String()
comme la plus sûre solution de conversion.Edit 3: De sa edit:
C'est la taille que vous avez besoin de diviser le tableau en. 🙂 Vérifiez également ajouté le 2e paragraphe.
Je suis en utilisant le Système.Texte.L'encodage.Unicode
Si vos données comprend notamment les séquences d'octets, il va interférer avec l'UTF-16 conversions. L'utilisation de la base-64 conversions ou directement sérialiser les tableaux d'octets si vous voulez vous assurer qu'ils fonctionnent correctement.
Merci pour l'astuce. Va utiliser en base 64. J'ai posté mon code. Il a réussi divise le byte [], mais est livré avec un mauvais exception des données lors du déchiffrement
OriginalL'auteur Sam Harwell
Je dirais quelque chose comme ce serait le faire:
OriginalL'auteur Matt Jacobsen
Pourquoi avez-vous besoin pour briser la chaîne de longueur variable morceaux? Fixe-longueur des morceaux, ou aucun morceaux, simplifierait beaucoup.
OriginalL'auteur Matt Howells
pourquoi ne pas utiliser un cadre au lieu de faire de l'octet-vous des trucs?
http://www.codinghorror.com/blog/archives/001275.html
OriginalL'auteur Sander
"les clés publiques sont différents"?
Vous crypter avec une clé privée, et déchiffrer avec la clé publique correspondant à la clé privée.
Rien d'autre ne vous donner que du charabia.
Droit, ce n'est pas sécurisé. Pour être sûr, vous devez comprendre la sécurité. Poser sur Stackoverflow n'est pas où vous allez obtenir à comprendre même les bases. Passer par "Le Livre de codes" de Simon Singh. Son très accessible et le plaisir de lire, et après que vous avez obtenu grâce à elle, vous allez commencer à comprendre les fondamentaux.
Oh, et vous n'avez pas utiliser la même clé pour le chiffrement et le déchiffrement. Vous crypter avec une clé "publique", et de décrypter avec la mise en correspondance "privé".
Merci vais jeter un oeil. Bien que le temps est précieux et pour le moment, cela fonctionne mais explicitement en gardant le coder/décoder la clé dans le code. Où gardez-vous et puis ne vous chiffrer? Cercle vicieux.
"Oh, et vous n'avez pas utiliser la même clé pour le chiffrement et le déchiffrement." - Avez-vous un C# RSA exemple?
OriginalL'auteur Will