BASE64URL JWT

BASE64URL是一种在BASE64的基础上编码形成新的加密方式,为了编码能在网络中安全顺畅传输,需要对BASE64进行的编码,特别是互联网中。

BASE64URL编码的流程:

      1、明文使用BASE64进行加密

      2、在BASE64的基础上进行一下的编码:

               1)去除尾部的”=”

               2)把”+”替换成”-“

               3)把”/”替换成”_”

BASE64URL解码的流程:

      1、把BASE64URL的编码做如下解码:

               1)把”-“替换成”+”

               2)把”_”替换成”/”

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

                           a)结果为0,不做处理

                           b)结果为2,字符串添加”==”

                           c)结果为3,字符串添加”=”

      2、使用BASE64解码密文,得到原始的明文


BASE64URL在JAVA中的实现

public static String base64UrlEncode(byte[] simple) {	String s = new String(Base64.encodeBase64(simple)); // Regular base64 encoder
	s = s.split("=")[0]; // Remove any trailing '='s
	s = s.replace('+', '-'); // 62nd char of encoding
	s = s.replace('/', '_'); // 63rd char of encoding
	return s;
}

public static byte[] base64UrlDecode(String cipher) {
	String s = cipher;
	s = s.replace('-', '+'); // 62nd char of encoding
	s = s.replace('_', '/'); // 63rd char of encoding
	switch (s.length() % 4) { // Pad with trailing '='s
		case 0:
			break; // No pad chars in this case
		case 2:
			s += "==";
			break; // Two pad chars
		case 3:
			s += "=";
			break; // One pad char
		default:
			System.err.println("Illegal base64url String!");
	}
	return Base64.decodeBase64(s); // Standard base64 decoder
}
from http://shimingxy.blog.163.com/blog/static/740383420152113532844/

base64url – oceanyang – 博客园 (cnblogs.com)