J'essaie d'encoder des cordes d'avant en arrière de la ficelle de base-64 et je suis truble pour obtenir le bon résultat.
string text = base64string.... //Here I have a base-64 string. byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); string base64Encoded = Convert.ToBase64String(encodedByte); if (text == base64Encoded) //If the new encoded string is equal to its original value return base64Encoded;
4 Réponses :
string text = base64string.... //Here I have a base-64 string. byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); string base64Encoded = Convert.ToBase64String(encodedByte); You are double encoding the string. You begin with a base64 string, get the bytes, and then encode it again. If you want to compare you will need to begin with the original string.
S - Je le sais. Ce que je veux, c'est coder une chaîne de base-64 à un autre format, puis à nouveau à la base 64, juste pour voir si le résultat de l'encodage n'a perdu aucune des données. Je sais que c'est une opération idiote, mais je veux le faire quand même.
@Eriklarson: Eh bien Base64 garantit déjà que vous ne perdrez pas de données, donc je ne vois pas le point. Cependant, si vous savez ce que je vous dise ... alors quelle est la question? Évidemment, vous n'obtiendrez pas la même chose lorsque vous encodez une ficelle encore et encore. Commencez avec la chaîne d'origine, encodez-la, décodez-la si vous voulez vraiment vérifier.
si qui vous en tirera comme une chaîne texte code> est une chaîne de base-64, alors vous le faites à l'envers:
code>. Notez que ce scénario n'est utile que pour représenter le texte Unicode dans un format ASCII. Normalement, vous ne feriez pas la base-64 encoder si le contenu d'origine est
chaîne code>. P> p>
Vous avez le code de codage correctement aménagé. Pour confirmer si la chaîne codée de base64 est correcte, vous pouvez essayer de le décoder et la comparaison du contenu décodé à l'original:
var decodedBytes = Convert.FromBase64String(base64encoded); var compareText = System.Text.Encoding.ASCII.GetString(decodedText); if (text == compareText) { // carry on... return base64encoded; }
Convertir tout ce que vous avez besoin dans la base64 dans une matrice d'octet, utilisez le gasebase64string et Tobase64String pour convertir et depuis la base64: mybase64string1 sera égal à myBase64String2. Vous devrez utiliser d'autres méthodes pour obtenir votre type de données dans une matrice d'octet et l'inverse pour récupérer votre type de données. Je l'ai utilisé pour convertir le contenu d'une classe en une matrice d'octet, puis sur la chaîne de base64 et écrivez la chaîne dans le système de fichiers. Plus tard, je l'ai lu dans une instance de classe en inversant le processus. P> p>
OK Lecture via votre code Vous prenez une chaîne de base64, puis codez-le à la base64, puis comparant la chaîne codée à l'orignal?
Pourquoi commencez-vous de la forme codée? Vous pouvez essayer de faire le codage d'abord du plaintext, puis décodez-le. Ou essayez-vous de mettre en œuvre vous-même l'algorithme de codage / décodage?
@Brian - oui c'est ce que je fais.
@Erik, rappelez-vous,
texte code> ne correspondra pas avec
base644CoDed code> comme
BASE64CODED code> est le contenu "GRABLED" de
texte code>, :RÉ
pourquoi le bowvote. Erik je pense que vous voyez le problème maintenant. Je pense que ce que vous voulez faire est de passer la chaîne non connectée originale à convertir.Tobase64String (encodébyte); Comparez ensuite le résultat à votre chaîne codée d'origine pour voir qu'ils correspondent.
@Erik, ce n'est pas ce que vous faites; Vous comparez le texte i> non enregistré i>
String avec la chaîne i> codée i>
base644Codé code> chaîne. Évidemment, ils ne sont pas les mêmes; Regardez-les dans le débogueur.