Base64

一:base64的加密解密

注意:base64非常容易被破解,仅适用于加密非关键信息的场合

在Python3中的代码实现,需要加多一步byte转换,如下:

import base64

token = "63cc/s*_7@3.com/Ala/us:f0"
encodestr = base64.b64encode(token.encode('utf-8'))
print(encodestr)
>>> b'NjNjYy9zKl83QDMuY29tL0FsYS91czpmMA=='
print(str(encodestr,'utf-8'))
>>> NjNjYy9zKl83QDMuY29tL0FsYS91czpmMA==

code = "NjNjYy9zKl83QDMuY29tL0FsYS91czpmMA=="
decodestr = base64.b64decode(code)
print(decodestr)
>>> b'63cc/s*_7@3.com/Ala/us:f0'
print(str(decodestr, 'utf-8'))
>>> 63cc/s*_7@3.com/Ala/us:f0

二:base64出现换行

Python中是不用担心字符串过长,base64加密后换行的问题,如果是java

String bTemp = Base64.encodeBase64String("123".getBytes());
        bTemp = bTemp.replaceAll("[\s*	

]", "")

可以拿到换行后的加密字符串,做以上操作。本人尝试过,似乎没有起到效果,可能姿势不对?所以不如根源上杜绝:

  换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的(本人未证实,欢迎指正)

import org.apache.commons.codec.binary.Base64;
String s = "asdwe123aqdasfdfeafe1234"
new String(Base64.encodeBase64(s.getBytes()))
或 Base64.encodeBase64String(
s.getBytes())

三:base64URL转义

  编码:1.去除尾部的“=” 2.把“+”替换成“-” 3.把“/”替换成“_”

  解码:1.把"-"替换成"+" 2.把"_"替换成"/"

     3.(计算BASE64URL编码长度)%4:

      a.结果为0,不做处理  b.结果为2,字符串添加"=="  c.结果为3,字符串添加"="

  Python中提供了urlsafe_b64encode和urlsafe_b64decode实现URL的转义:  

print base64.b64encode('ixb7x1dxfbxefxff')
>>> abcd++// 
print base64.b64encode('ixb7x1dxfbxefxff', '-_') 
>>> abcd--__ 
print base64.urlsafe_b64encode('ixb7x1dxfbxefxff') 
>>> abcd--__ 
base64.urlsafe_b64decode('adcd--__') 
>>> 'ixb7x1dxfbxefxff'

    

原文地址:https://www.cnblogs.com/sen-c7/p/9444518.html