Est-il ok pour supprimer l'égalité des signes à partir d'une chaîne base64?
J'ai une chaîne que je suis l'encodage en base64 pour économiser de l'espace. Est-ce une grosse affaire si je supprime le signe d'égalité à la fin? Cette importante diminution de l'entropie? Que puis-je faire pour assurer la longueur de la chaîne résultante est fixe?
>>> base64.b64encode(combined.digest(), altchars="AB")
'PeFC3irNFx8fuzwjAzAfEAup9cz6xujsf2gAIH2GdUM='
Grâce.
j'ai une chaîne que je suis l'encodage en base64 pour économiser de l'espace - Base64 n'a pas d'économiser de l'espace, il fait le contraire. Il est généralement utilisé pour exprimer arbitraire séquences d'octets (en général à base ascii) de la ligne de protocoles.
Est-ce juste moi qui est surpris de lire 'string que je suis l'encodage en base64 pour économiser de l'espace"? Base64 est plus bavarde que la moyenne de votre chaîne et son utilisation plus fréquente est de transférer des données BINAIRES comme une chaîne de caractères.
donc, je ne suis pas la seule 🙂
Et aussi, s'il vous plaît ne pense pas que Base64 est de chiffrement, comme beaucoup de gens semblent le faire.
Vous ne devriez pas utiliser
Est-ce juste moi qui est surpris de lire 'string que je suis l'encodage en base64 pour économiser de l'espace"? Base64 est plus bavarde que la moyenne de votre chaîne et son utilisation plus fréquente est de transférer des données BINAIRES comme une chaîne de caractères.
donc, je ne suis pas la seule 🙂
Et aussi, s'il vous plaît ne pense pas que Base64 est de chiffrement, comme beaucoup de gens semblent le faire.
Vous ne devriez pas utiliser
AB
pour la altchars... base64 utilise A-Za-z0-9
pour représenter les 6 bits de valeurs 0-61, altchars sélectionne ce qui est utilisé pour les valeurs de 62 et 63. À l'aide de quelque chose qui est déjà affecté à une valeur de provoquer des erreurs de décodage... par exemple b64decode(b64encode('\x00','AB'),'AB')
sera de retour '\xfb'
au lieu de '\x00'
. Même si vous êtes juste de hachage, que est rejet de l'entropie, bien que la suppression de rembourrage n'est pas.OriginalL'auteur ensnare | 2012-01-26
Vous devez vous connecter pour publier un commentaire.
Regardant votre code:
La chaîne de l'être encodés en base64 est le résultat d'une fonction appelée
digest()
. Si votre digérer la fonction est la production de longueur fixe des valeurs (par ex. dans le cas de calcul du MD5 ou SHA1 digère), puis le paramètre de b64encode sera toujours la même longueur.Si ce qui précède est vrai, alors vous pouvez bande de fuite signes "égal", car il y aura toujours le même nombre d'entre eux. Si vous faites cela, il suffit d'ajouter le même nombre de signes "égal" à la chaîne avant de les décoder.
Si l'empreinte n'est pas une longueur fixe, alors il n'est pas sûr de couper les signes "égal".
Edit: vous Ressemble peut-être à l'aide d'un condensé SHA-256? Le condensé SHA-256 est de 256 bits (ou 32 octets). 32 octets est de 10 groupes de 3, et deux à gauche. Comme vous allez le voir à partir de la Wikipédia article sur le rembourrage; je veux dire que vous toujours d'avoir une fuite d'égal à égal. Si c'est SHA-256, alors qu'il serait OK pour le strip, aussi longtemps que vous n'oubliez pas de l'ajouter à nouveau avant de décodage.
Vous avez raison. Le encodée à digérer dans la question d'origine a 44 octets. Nous avons donc 256 bits, ce qui est (10 groupes de 3 octets) + (2 octets restes), encodé en 11 groupes de 4 octets. J'ai mis à jour mon commentaire. Merci.
OriginalL'auteur Martin Ellis
Tous les 3 octets que vous avez besoin d'encoder en Base64 sont convertis à 4 caractères ASCII et le caractère '=' est utilisée pour remplir le résultat de façon à ce qu'il y a toujours un multiple de 4 caractères codés. Si vous avez un multiple exact de 3 octets, alors vous n'aurez pas de signe égal.
Un disque de rechange octet signifie que vous obtenez deux caractères '=' à la fin.
Deux de rechange octets signifie que vous obtenez un caractère '=' à la fin.
selon la façon dont vous décoder la chaîne, il peut ou ne peut pas voir cela comme une chaîne valide. Avec l'exemple de la chaîne que vous avez, il n'est pas décoder, mais certaines chaînes simples, je ai essayé de faire décoder.
Vous pouvez lire cette page pour une meilleure compréhension de la base64 chaînes de caractères et encodage/décodage.
http://www.nczonline.net/blog/2009/12/08/computer-science-in-javascript-base64-encoding/
Il y a en ligne gratuit d'encodeurs/décodeurs que vous pouvez utiliser pour vérifier votre chaîne de sortie
OriginalL'auteur Brian
C'est bien de supprimer les signes d'égalité, aussi longtemps que vous savez ce qu'ils font.
Base64 sorties 4 caractères pour tous les 3 octets de code (en d'autres termes, chaque caractère de code pour 6 bits). Les caractères de remplissage sont ajoutés, de sorte que toute chaîne base64 est toujours un multiple de 4 dans la longueur, le rembourrage caractères ne fait pas de coder les données. (Je ne peux pas dire pour sûr pourquoi cela a été fait - comme un moyen de vérification d'erreur si une chaîne est tronquée, à la facilité de décodage, ou autre chose?).
Dans tous les cas, cela signifie que si vous avez
x
base64 caractères (sans rembourrage), il y aura4-(x%4)
les caractères de remplissage. (Six%4=1
n'arrivera jamais à cause de la factorisation de 6 et 8). Car ceux-ci contiennent pas de données réelles, et peut être récupéré, j'ai souvent la bande de ces hors quand je veux économiser de l'espace, par exemple le suivant:OriginalL'auteur Eli Collins
ceux qui sont rembourrage et vous n'avez pas économiser beaucoup en les supprimant car il y a au plus deux d'entre eux, donc si vous voulez économiser de l'espace regarder ailleurs. et par la référence à l'entropie êtes-vous à la compression de ces base64 cordes? si donc, même si vous ne les supprimer, ils n'auront pas beaucoup d'effet sur la taille compressée.
OriginalL'auteur Dan D.
Autres que dans le cas @Martin Ellis points, de jouer avec les caractères de remplissage peut conduire à l'obtention d'une
et Et la production de certains déchets pendant que vous y êtes.
Comme indiqué par @MattH, base64 va faire le contraire de la conservation de l'espace.
Au lieu d'économiser de l'espace, vous devez appliquer des algorithmes de compression tels que zlib.
Par exemple,
zlib
OriginalL'auteur HeyWatchThis
Je ne le pense pas.
http://en.wikipedia.org/wiki/Base64#Padding
ces équivaut sont "utiles"
OriginalL'auteur oleg.chubin