一: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'