Base64

概述

(见https://blog.csdn.net/local_752/article/details/121970823)

Base64是一种用64个字符表示所有二进制数据的编码方式,通过将二进制数据每6位一组的方式重新组织,刚好可以使用0~9的数字、大小写字母以及“+”和“/”总共64个字符表示从000000111111的64种状态

它实际上是一种“二进制到文本”的编码方法

Base64是一种用64个字符(这64个字符中包括大小写字母、数字、+和/,还有用来补缺的特殊字符=)来表示任意二进制数据的方法。它是一种编码方式,而非加密方式。它通过将二进制数据转变为64个“可打印字符”,完成了数据在HTTP协议上的传输。通过将二进制数据每6位一组的方式重新组织,刚好可以使用0~9的数字、大小写字母以及“+”和“/”总共64个字符表示从000000111111的64种状态

注意:由于base64编码用了8位字符来表示信息中的6个位,所以base64编码字符串大约比原始值扩大了33%。

image-20230917180421686

变表Base64

解密脚本:

# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.7

import base64
from string import *


def original_title():
    # 原来的题目
    str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
    string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
    string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    flag = input('welcome to moectf\ninput your flag and I wiil check it:')
    enc_flag = base64.b64encode(flag.encode()).decode()
    enc_flag = enc_flag.translate(str.maketrans(string2, string1))
    if enc_flag == str1:
        print('good job!!!!')
    else:
        print('something wrong???')
        exit(0)


def decrypt1():
    # 方法1
    str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
    string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
    string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

    convert_dict = {}
    for i in range(len(string1)):
        ch1 = string1[i]
        ch2 = string2[i]
        convert_dict[ch1] = ch2

    str2 = ''
    for i in str1:
        if i not in convert_dict.keys():
            str2 += i
            continue
        j = convert_dict[i]
        str2 += j
    flag = base64.b64decode(str2.encode()).decode()
    print(flag)


def decrypt2():
    # 方法2
    str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
    string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
    string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    flag = base64.b64decode(str1.translate(str.maketrans(string2, string1)))
    print(flag.decode())


# decrypt1()
decrypt2()

posted @ 2024-01-24 17:53  WA-HAHA  阅读(78)  评论(0)    收藏  举报