Python base64

base64表示一种使用64个字符表示任意二进制数据的方法,注意64个字符是可以自己定义的

参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017684507717184

  用记事本打开exejpgpdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

原理

  首先准备一个包含64个字符的数组,这就相当于Ascii编码中的Ascii表,根据下面的算法得出的数过来查表,得到的一个一个的字符就是最后将二进制进行base64编码得到的字符串

[‘A‘, ‘B‘, ‘C‘, ... ‘a‘, ‘b‘, ‘c‘, ... ‘0‘, ‘1‘, ... ‘+‘, ‘/‘]

  然后,对二进制数据进行处理,每3个字节一组,一个字节是8bit,一共是3x8=24bit,又将这3组划为4组,每组正好6个bit:

  然后将这6bit转为10进制的数,(6bit的二进制数刚好能表示0-63,就是64个数 )作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

使用

以上就是base的编码原理,所以,根据自己定义的64个字符串的不同,同样的二进制文件可能也有不同的结果

  另外,上面分组的过程中,我们将二进制文件分为3个字节的组,那么当二进制的长度不是3的倍数会怎么办呢,Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

  Python内置的base64可以直接进行base64的编解码:

>>> import base64
>>> base64.b64encode(b‘binary\x00string‘)
b‘YmluYXJ5AHN0cmluZw==‘
>>> base64.b64decode(b‘YmluYXJ5AHN0cmluZw==‘)
b‘binary\x00string‘

  由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+/分别变成-_(略)

  还可以自己定义64个字符的排列顺序,这样就可以自定义Base64编码,不过,通常情况下完全没有必要。

  Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。

  Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

  由于=字符也可能出现在Base64编码中,但=用在URL、Cookie里面会造成歧义,所以,很多Base64编码后会把=去掉:

# 标准Base64:
‘abcd‘ -> ‘YWJjZA==‘
# 自动去掉=:
‘abcd‘ -> ‘YWJjZA‘

  去掉=后怎么解码呢?因为Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数,因此,需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了。(因为等号是怎么加的,加等号是为了 表示\x00字节在末尾补足的个数)

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。

 

原文地址:https://www.cnblogs.com/Gaoqiking/p/11610417.html

时间: 2024-10-11 06:30:14

Python base64的相关文章

python—base64

今天在写题时,执行脚本又报错了 脚本如下 #! /usr/bin/env python3 # _*_ coding:utf-8 _*_ import base64 # 字典文件路径 dic_file_path = './10_million_password_list_top_100.txt' with open(dic_file_path, 'r') as f: password_dic = f.readlines() username = 'admin:' # 用户名 for passwor

Python base64 和图片相互转换

os, base64 ###图片转换为base64编码 (,) faf.read() strbase64.b64encode(a) str ###base64编码转换图片 tbase64.b64decode(str) (,) ff.write(t)

python base64加密文本内容(1)

仅仅使用base64加密安全系数太低了,我们还可以自定义base64加密后的文本进行一些变化,提高安全系数,在解密时再回复某些变化 1,先实现一个base64加密 1 import base64 2 import os 3 4 def jiami(): 5 load=input('输入加密的txt文件的路径:') 6 #将路径文件加密保存 7 f=open(load) 8 content=f.read() 9 10 content1=content.encode(encoding='utf-8'

采坑:python base64

需求:  读取文本内容,对字符串进行base64加密 >>> str = 'aaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbb\ncccccccccccccccccccccccccc' >>> encodeStr = base64.encodestring(str) >>> encodeStr 'YWFhYWFhYWFhYWFhYWFhYWFhYQpiYmJiYmJiYmJiYmJiYmJiYmJiYmJi

python base64 crypto产品加密案例

-- coding: utf-8 -- from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_heximport jsonimport urllib2import timeimport random, stringimport base64import argparseimport sysimport osimport datetimeclass prpcrypt(): def __init__(self, key, iv)

python 模块介绍 - Base16, Base32, Base64 数据编码

简介 功能:RFC 3548: Base16, Base32, Base64 数据编码.转换二进制数据为适合明文协议传输的 ASCII 序列.转换8bits 为每个字节包含 6,5 或 4bits 的有效数据,比如 SMTP, URL 的一部分或者 HTTP POST 的一部分.参考:RFC 3548.编码算法不同于 uuencode.类型:标准库相关模块:uu, binhex, uu, quopri Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法.由于 2 的 6 次方

CTF中那些脑洞大开的编码和加密

0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙伴做题时给一些参考,当然常在CTF里出现的编码也可以了解一下.本来是想尽快写出参考的文章,无奈期间被各种事情耽搁导致文章断断续续写了2个月,文章肯定有许多没有提及到,欢迎小伙伴补充,总之,希望对小伙伴们有帮助吧! 0x01 目录 1 2 3

python4delphi 设置syspath

详细看demo25的代码 These techniques are demonstrated in Demo25 in the examples folder of your Python for Delphi distribution. The old vs. the new ways. Because Delphi 6 has custom variants, they can point to specific smart proxies for python objects.  Befo

bandit game

http://overthewire.org/wargames/ l0: cat readme l1: -不能直接读,默认为参数前那个-,这里补充为绝对路径 cat /home/bandit1/- l2: 输入cat spa 然后tab自动补全. 题意要告诉的是空格前应加反斜杠 UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK l3: ls -a查看所有文件 pIwrPrtPN36QITSp3EQaw936yaFoFgAB l4: file查看类型,然后查看那个ascii tex