base64加密算法分析

March 14, 2019 逆向 访问: 28 次

学不动其他了,哎!

介绍

base64是网络上常见的加密方式之一,算法没有那么复杂,可以进行快速的解密,所以不是特别的安全

算法分析

被Base64编码之后所得到的所有字符都是在一个表中:

index_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

在进行base64加密的时候:

  • 每三个字符变成二进制后再分割成4个字符
  • 不够的用“=”进行补充
  • 将分割后的字符按照值在密码表中进行索引找值
  • 得出加密后的结果

解密过程反之即可。

算法实现(python)

def mybase64encode(Plaintext):
    index_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    binary_str = ""
    if len(Plaintext)%3==0:
        num = 0
    else:
        num=3-len(Plaintext)%3
    for y in range(num):
        Plaintext += b"\x00"
    for x in range(len(Plaintext)):
        binary_str += bin(ord(Plaintext[x]))[2:].rjust(8,"0")
    ciphertext = ""
    for x in range(0,len(binary_str),6):
        ciphertext+=index_table[eval("0b"+binary_str[x:x+6])]
    ciphertext = ciphertext[:len(ciphertext)-num]
    for x in range(num):
        ciphertext+="="
    return ciphertext
def mybase64decode(ciphertext):
    index_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    num=0
    for x in range(len(ciphertext)):
        if ciphertext[x]=="=":
            num+=1
    ciphertext =ciphertext.replace("=","")
    arr = []
    for x in range(len(ciphertext)):
        arr.append(index_table.index(ciphertext[x]))
    binary_str = ""
    for y in range(len(arr)):
        binary_str+=bin(arr[y])[2:].rjust(6,"0")
    binary_str = binary_str[0:len(binary_str)-(num*(8-6))]
    plaintext = ""
    for x in range(0,len(binary_str),8):
        plaintext+=chr(eval("0b"+binary_str[x:x+8]))
    return plaintext

添加新评论