Mon problème est que j'ai quelque chose de codé (base64 comme) avec une table d'index différente: au lieu de p> Donc, lorsque j'utilise 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? P> update1 strong>: J'utilise cela, ce qui fonctionne, mais semble un peu lent et peu professionnel. :) p> base64.b64decode () code> 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)? P>
5 Réponses :
Vous pouvez utiliser Traduire () Code> a > et Maketrans () code> : from string import maketrans
base64fixTable = maketrans("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
def correctbase64(str):
return str.translate(base64fixTable)
Quelque chose comme ça devrait fonctionner (AVERTISSEMENT: Code non testé; Peut être rempli d'erreurs): Il n'est pas possible de créer les fonctions standard base64 code> (ou les niveaux inférieur dans binascii code> qu'ils appellent) utilisent une table personnalisée. p> p>
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)
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
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)
Bonjour, bienvenue, veuillez fournir une explication de votre code également lorsque vous répondez aux questions.