8
votes

Phrase qui utilise chaque personnage de base64

J'essaie de construire une combinaison phrase / lettre qui retournera tous les caractères de base64, mais à ne pas trouver un mot aux fins de test unitaire.

Les tests de l'unité que j'ai jusqu'à présent ne parviennent pas à toucher les lignes qui gèrent les caractères + et /. Bien que je puisse les élingiter à l'encodeur / décodeur, il serait agréable d'avoir une source lisible humaine (l'équivalent de base64 du "chien brun rapide").


2 commentaires

HM ... Le problème que je vois ici est que la phrase devra être longue et elle peut donc être mal saisie. Et si vous ne le tapez pas, mais copiez-la pâte à la place, vous pouvez utiliser une chaîne générée appropriée.


Mais si vous essayez de travailler à l'envers et d'intégrer les caractères + et / /, vous obtenez des caractères avec Umlaut, etc. ou des non-imprimables qui ne sont pas utiles pour passer dans un peuest.


4 Réponses :


1
votes

Vous ne pouvez probablement pas faire ça.

/ dans base64 codes 111111 (6 '1' bits).

Comme All ASCII (qui sont les caractères de type et imprimables) figurent dans la plage de 0-127 (c'est-à-dire 00000000 et 01111111 ), le seul caractère ASCII qui pourrait être codé en utilisant '/' est le caractère ASCII avec le code 127, qui est le caractère non imprimable del .

Si vous autorisez des valeurs supérieures à 127, vous pouvez avoir une chaîne imprimable mais non typable.


0 commentaires

1
votes

Lorsque vous essayez d'encoder / décoder, il s'agit du seul endroit où je casse la règle de l'unité testant une seule méthode à la fois. Vous pouvez avoir des méthodes d'encodage ou de décodage séparément, mais le seul moyen de dire si vous le faites correctement, c'est utiliser le codage et le décodage en une seule revendication. J'utiliserais le code PSEDEO suivant.

Generate a random string using Path.GetRandomFilename() this string is cryptographically strong
Pass the string to the encode method
Pass the output of the encode to the decode method
Assert.AreEqual(input from GetRandomFilename, output from Decode)


1 commentaires

J'utilise effectivement quelques longues chaînes du RFC3548. Comme il s'agit simplement d'un texte anglais, la gamme de caractères est limitée.



10
votes

Voici une chaîne de test codée de base64 comprenant tous les 64 symboles de base24 possibles:

char test_string[] = "So?<p>"
    "This 4, 5, 6, 7, 8, 9, z, {, |, } tests Base64 encoder. "
    "Show me: @, A, B, C, D, E, F, G, H, I, J, K, L, M, "
    "N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \\, ], ^, _, `, "
    "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s.";


4 commentaires

Je vais devoir vérifier cela quand je rentrerai à la maison le week-end.


Surpris que \ n'a pas besoin de s'échapper dans votre chaîne de test.


Oups. Oui, j'ai besoin de doubler la barre oblique inverse pour l'échapper si je veux mettre cette chaîne de test dans mon code source (mais pas si je le lisez à partir d'un fichier). Fixé.


"Depuis que je l'ai fait, je dirais que c'est possible" Oh s'il vous plaît, ce ne serait pas Stackoverflow s'il n'y avait pas au moins une réponse indiquant "Vous ne pouvez pas / ne devrait pas le faire"



1
votes

Qu'est-ce que j'ai proposé, peut prouver pas moins exhaustif. Doit être entré exactement tel quel: j'inclus un lien vers une capture d'écran montrant tous les caractères généralement invisibles ci-dessous, ainsi que la chaîne de données de base64 auquel elle convertit et un tableau des statistiques pertinentes pertinentes à chacun des 64 caractères. .


xxx

Ceci code à la chaîne de base64: xxx

qui contient xxx


0 commentaires