8
votes

Codage de cordes à partir de Base-64

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;


6 commentaires

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 ne correspondra pas avec base644CoDed comme BASE64CODED est le contenu "GRABLED" de texte , :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 non enregistré String avec la chaîne codée base644Codé chaîne. Évidemment, ils ne sont pas les mêmes; Regardez-les dans le débogueur.


4 Réponses :


10
votes
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.

2 commentaires

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.



6
votes

si texte est une chaîne de base-64, alors vous le faites à l'envers: xxx

qui vous en tirera comme une chaîne . 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 .


0 commentaires

0
votes

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;
}


0 commentaires

1
votes

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: xxx

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.


0 commentaires