7
votes

Décodez base64 comme une chaîne avec une ou des tableaux d'index différents

Mon problème est que j'ai quelque chose de codé (base64 comme) avec une table d'index différente: xxx

au lieu de xxx

Donc, lorsque j'utilise base64.b64decode () Cela me donne un mauvais résultat. Existe-t-il un moyen de définir cette table conversion de la table (comme paramètre peut-être)?

ou devrais-je "convertir" la mauvaise chaîne de base64, je veux dire remplacer 0 à A, 1 à b, etc ... et que d'utiliser base64decode? Si oui, quelle est la solution de contournement la mieux et rapide pour cela?

update1 : J'utilise cela, ce qui fonctionne, mais semble un peu lent et peu professionnel. :) xxx


0 commentaires

5 Réponses :


3
votes

Vous pouvez utiliser Traduire () Code> a > et Maketrans () code> :

from string import maketrans

base64fixTable = maketrans("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
def correctbase64(str):
    return str.translate(base64fixTable)


0 commentaires

9
votes

Quelque chose comme ça devrait fonctionner (AVERTISSEMENT: Code non testé; Peut être rempli d'erreurs): xxx

Il n'est pas possible de créer les fonctions standard base64 (ou les niveaux inférieur dans binascii qu'ils appellent) utilisent une table personnalisée.


0 commentaires

0
votes

Utilisez Maketrans pour créer une table de traduction, puis traduire du premier alphabet à la seconde. Ensuite, base64 décode.

import string
import base64
def decode(str):
    #make a translation table.
    table = string.maketrans(
      #your alphabet
      string.digits + string.uppercase + string.lowercase + "+/",
      #the original alphabet
      string.uppercase + string.lowercase + string.digits + "+/"
    )
    #translate
    str.translate(s, table)

    #finally decode
    return base64.b64decode(str)


0 commentaires

0
votes

Ceci gérera l'erreur TypeError: Rembourrage incorrect CODE>

from string import maketrans
import base64
STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
CUSTOM_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/'

def correctbase64(input):
    DECODE_TRANS = maketrans(CUSTOM_ALPHABET, STANDARD_ALPHABET)
    newStr =  input.translate(DECODE_TRANS)
    # Add '=' char at the end of the string
    newStr += '='
    return base64.b64decode(newStr)

print custom_base64decode('x/Tcw/g') # hello


0 commentaires

1
votes
print "Hello Reverse Engineering!\n"

import string
import base64


my_base64chars  = "WXYZlabcd3fghijko12e456789ABCDEFGHIJKL+/MNOPQRSTUVmn0pqrstuvwxyz"
std_base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

s = 'whatever encoded message you have that used my_base64chars index'

c = s.translate(string.maketrans(my_base64chars, std_base64chars))
data = base64.b64decode(c)
print (data)

1 commentaires

Bonjour, bienvenue, veuillez fournir une explication de votre code également lorsque vous répondez aux questions.