8 votes

Phrase qui utilise tous les caractères base64

Je tente de construire une combinaison de phrase/lettre qui retournera chaque caractère en base64, mais je n'arrive pas à trouver un mot dans le but de faire des tests unitaires.

Les tests unitaires que j'ai réalisés jusqu'à présent échouent à atteindre les lignes qui gèrent les caractères + et /. Bien que je puisse les envoyer directement à l'encodeur/décodeur, il serait bien d'avoir une source lisible par les humains (l'équivalent base64 de 'le renard brun rapide').

10voto

David Cary Points 1678

Voici une chaîne de test encodée en Base64 qui inclut tous les 64 symboles Base64 possibles:

char base64_encoded_test[] =
"U28/PHA+VGhpcyA0LCA1LCA2LCA3LCA4LCA5LCB6LCB7LCB8LCB9IHRlc3RzIEJhc2U2NCBlbmNv"
"ZGVyLiBTaG93IG1lOiBALCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBO"
"LCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBYLCBZLCBaLCBbLCBcLCBdLCBeLCBfLCBgLCBh"
"LCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLg==";

char base64url_encoded_test[] =
"U28_PHA-VGhpcyA0LCA1LCA2LCA3LCA4LCA5LCB6LCB7LCB8LCB9IHRlc3RzIEJhc2U2NCBlbmNv"
"ZGVyLiBTaG93IG1lOiBALCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBO"
"LCBPLCBQLCBRLCBSLCBTLCBULCBVLCBWLCBXLCBYLCBZLCBaLCBbLCBcLCBdLCBeLCBfLCBgLCBh"
"LCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLg==";

Cela se décode en une chaîne composée entièrement de texte relativement lisible pour les humains:

char test_string[] = "So?

Cette chaîne décodée ne contient que des lettres dans la plage limitée des caractères ASCII 7 bits imprimables avec isprint()'able (espace à '~').

Étant donné que je l'ai fait, je soutiendrais que c'est possible :-).

1voto

adamk Points 9991

Vous ne pouvez probablement pas faire cela.

/ en base64 encode 111111 (6 '1' bits).

Comme tous les caractères ASCII (qui sont les caractères pouvant être tapés et imprimés) se situent dans la plage de 0 à 127 (c'est-à-dire entre 00000000 et 01111111), le seul caractère ASCII pouvant être encodé en utilisant '/' est le caractère ASCII avec le code 127, qui est le caractère DEL non imprimable.

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

1voto

Nate Noonen Points 986

Lors de la tentative d'encodage/décodage, c'est le seul endroit où je ne respecte pas la règle de tester une seule méthode à la fois. Vous pouvez avoir des méthodes pour l'encodage ou le décodage séparément, mais la seule façon de savoir si vous le faites correctement est d'utiliser à la fois l'encodage et le décodage dans un seul assert. Je recommande d'utiliser le pseudo-code suivant.

Générer une chaîne aléatoire en utilisant Path.GetRandomFilename(), cette chaîne est cryptographiquement forte
Passer la chaîne à la méthode d'encodage
Passer la sortie de l'encodage à la méthode de décodage
Assert.AreEqual(entrée de GetRandomFilename, sortie de Decode)

Vous pouvez boucler autant de fois que vous le souhaitez pour dire que c'est testé. Vous pouvez également couvrir certains cas spécifiques; cependant, comme l'encodage diffère parfois en fonction de la position des lettres, il vaut mieux opter pour une chaîne aléatoire et simplement appeler l'encodage/décodage environ 50 fois.

Si vous constatez que l'encodage/décodage échoue dans des scénarios acceptés, créez des tests unitaires pour ceux-ci et filtrez les chaînes qui contiennent ces caractères/combinaisons de caractères. De plus, documentez ces échecs dans les commentaires XMLDocs, les commentaires de code et toute documentation de votre application.

1voto

a female faust Points 61

Ce que j'ai trouvé peut se révéler être utile. Besoin d'être entré tel quel : Je joins un lien vers une capture d'écran montrant tous les caractères habituellement invisibles ci-dessous, ainsi que la chaîne de données Base64 vers laquelle elle se convertit, ainsi qu'un tableau des statistiques pertinentes concernant chacun des 64 caractères contenus.


                        Dema

             LEI    

              LE RENARD BRUN RAPIDE   

               a sauté

                par-dessus    

                 le    

                  chiens    

                   paresseux    

                    ou  

                     a-t-il    

                      été    

                       poussé    

                        ? 

            hmm.

            ÿß®Þ~c*¯/

Cela encode en la chaîne de données Base64 :

            PEhUTUw+PEhFQUQ+PC9IRUFEPjxCT0RZPjxQUkU+DQpEaWQJDQoNCiBUSEUJDQoNCiAgVEhFIFFVSUNLIEJST1dOIEZPWAkNCg0KICAganVtcAkNCg0KICAgIG92ZXIJDQoNCiAgICAgdGhlCQ0KDQogICAgICBsYXp5CQ0KDQogICAgICAgZG9ncwkNCg0KICAgICAgICBvcgkNCg0KICAgICAgICAgd2FzCQ0KDQogICAgICAgICAgaGUJDQoNCiAgICAgICAgICAgcHVzaGVkCQ0KDQogICAgICAgICAgICA/CQ0KDQo8L1BSRT48Qj5obW0uPC9CPjwvQk9EWT48SFRNTD4NCg0KDQoNCg0KDQoNCg//367efmMqry/==

qui contient

            5--/'s
            4--+'s
            3--='s
            14--0's
            3--1's
            3--2's
            2--3's
            4--4's
            3--5's
            2--6's
            2--7's
            4--8's
            6--9's
            5--a's
            27--A's
            2--b's
            5--B's
            5--c's
            4--C's
            4--d's
            14--D's
            2--e's
            10--E's
            2--f's
            8--F's
            36--g's
            6--G's
            5--h's
            2--H's
            5--i's
            30--I's
            5--j's
            6--J's
            8--k's
            12--K's
            2--l's
            3--L's
            2--m's
            4--M's
            3--n's
            14--N's
            13--o's
            2--O's
            3--p's
            9--P's
            2--q's
            24--Q's
            2--r's
            5--R's
            2--s's
            6--S's
            2--t's
            7--T's
            2--u's
            1--U's
            3--v's
            6--V's
            4--w's
            5--W's
            3--x's
            6--X's
            2--y's
            4--Y's
            3--z's
            5--Z's

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X