Android 解析jwt遇到java.lang.IllegalArgumentException: bad base-64

解析jwt的时候遇到了java.lang.IllegalArgumentException: bad base-64
百思不得其解
按照网上说的:Android&ios java
这俩咋就不好使呢?
后来我看了篇帖子说

android开发中的bad base-64错误

在涉及到服务器的软件中,由于使用android的Base64解码功能,而服务器端加密为了防止URL格式问题,会采用Apache的URLSafeEncode等方式进行数据安全加密,android端使用Base64.decode(src,Base64.URL_SAFE)不会出现问题

但是如果android自己加密,使用的时Base64.encodeToString(bstr,Base64.DEFAULT)就会有可能出现

对就是这个可能性,让我用Base64.DEFAULT解析的时候出bug了,关键这bug还挺奇怪,跟字符串长度没关系,跟解析内容没关系,但解析的东西组合到一起就报错,使用了Base64.URL_SAFE之后就正常了

private fun base64Decode(content: String ): String? {
//注意此处不能使用Base64.DEFAULT,否则再特定情况下会报错
        val contentByte = Base64.decode(content,Base64.URL_SAFE)
        try {
            return String(contentByte, java.nio.charset.StandardCharsets.UTF_8)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return ""
   }

热门文章

暂无图片
编程学习 ·

Java基础——数据库连接信息使用密文

背景数据库连接配置文件一般都是使用明文,这会带来数据库泄露的安全问题。例如jdbc.properties配置文件中,数据库连接地址、用户名、密码都是明文,如何使配置文件中的数据库连接信息避免明文显示是本文重点内容,即如何使配置信息使用密文就可以达到跟明文一样的效果。分析假…
暂无图片
编程学习 ·

安卓安全那点事

本文旨在对于一个安卓app的安全知识做一个较为泛泛的总结,为开发出更安全的应用提供思路。内容比较粗略,仅起到抛砖引玉的效果,还望大家见谅。Android应用的安全 意义 在维基百科上有一个关于计算机安全的定义: 计算机安全(computer security)是计算机与网络领域的信息安…
暂无图片
编程学习 ·

怎么才能最短时、高效、踏实的学习 Python?

作者:飞绝眷岭 链接:https://www.zhihu.com/question/28530832/answer/58656332 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Dataquest 这个网站上提供了一系列和数据分析相关的python教程,从python基本语法到data analysis的基本函数…
暂无图片
编程学习 ·

Spring学习笔记(一):工厂模式

Spring学习笔记一:工厂模式1.简介2.工厂模式简单工厂设计通⽤⼯⼚的设计通用工厂的使用方式 1.简介 1.Spring是⼀个轻量级的 JavaEE 解决⽅案,整合众多优秀的设计模式。 2.EJB(Enterprise Java Bean):重量级框架,存在问题包括:运行环境苛刻,代码移植性差。 什么是轻量级?…
暂无图片
编程学习 ·

[算法]回文数

题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例输入: 121 输出: true输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。输入: 10 输出: false 解释: 从右向左读, 为 01…
暂无图片
编程学习 ·

基于Token的身份验证的原理

目录1 发展史2 Cookie3 Session3.1 cookie和session的区别4 Token4.1 传统方式——基于服务器的验证4.2 基于服务器验证方式暴露的一些问题4.3 基于Token的验证原理4.5 Tokens的优势1 发展史1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记…
暂无图片
编程学习 ·

【项目总结】第三方OA对接、项目从零入手

前言近半年在平台项目的接触过程中,发现底层源码的能力很重要,有助于帮助我们理解项目代码,整理思路。代码思维能力也很重要。 项目经历 一、开发内容 第三方对接 华为云WeLink对接 2019-12 ~ 2020-04 企业微信小程序对接 2020-03 ~ 2020-05 好视通视频会议对接 2020-0…
暂无图片
编程学习 ·

网络管理

什么是网络管理 网络管理的基础设施 因特网标准管理框架 管理信息结构:SMI 管理信息库:MIB SNMP协议运行和传输映射 安全性和管理 ASN.1
暂无图片
编程学习 ·

那些不常见,但却非常实用的 css 属性

作者:寒水寺一禅https://segmentfault.com/a/11900000228515431、-webkit-line-clamp可以把 块容器 中的内容限制为指定的行数。并且在超过行数后,在最后一行显示"..."这是正常的展示display: -webkit-box; /*值必须为-webkit-box或者-webkit-inline-box*/ -webkit…
暂无图片
编程学习 ·

Java 语言中关键字“static”的理解和应用详解

接触Java编程语言的初学者们,都是熟悉static这个关键词的,至少混个脸熟了已经。涉及到它的概念、或解释,我们都是知道它表示“静态”、甚至了解“静态存储区”。它可以应用到:属性 方法 代码块 还可以做“静态导入” 内部类 一、static修饰的属性,我们亦称之为“静态变量”…
暂无图片
编程学习 ·

springboot静态资源无法加载最后原因竟然是拦截器没有生效

今天打开项目,发现页面的样式没了,用F12调试,果不其然,css,js等样式没有加载成功 后面看控制台发现报 No mapping for GET 静态资源。 很明显,访问静态资源的请求被springboot拦截了。 然后我又看自己写的拦截器 @Overridepublic void addInterceptors(InterceptorRegist…
暂无图片
编程学习 ·

MYSQL字符类型字段判断是否包含某个字符N种方法

方法一:使用LIKE关键字SELECT * FROM 表名 WHERE 字段名 LIKE "%字符%";方法二:使用INSTR函数SELECT * FROM 表名 WHERE INSTR(字段,字符);方法三:使用FIND_IN_SET函数SELECT * FROM 表名 WHERE FIND_IN_SET(字符, 字段名);方法四:使用LOCATE函数SELECT * FROM 表…
暂无图片
编程学习 ·

第4章 一般概念

一、名称空间std 1.namespace具有可扩展开放性,可发生于任何源码文件上。 2.欲使用C++标准库的任何东西,有三种选择: (1)直接指定标识符。如std::cout (2)使用using declaration。如:using std::cout (3)使用using directive。如using namespace std; 注意:在复杂的…
暂无图片
编程学习 ·

Java学习 | 基础知识 - 关键字和标识符

Java基本知识 1、关键字关键字不能用于常量、变量、和任何标识符的名称Java关键字整理类别关键字 说明访问控制private私有的protected受保护的public公共的default默认类、方法和变量修饰符abstract声明抽象class类extends扩充,继承final最终值,不可改变的implements实现(接…
暂无图片
编程学习 ·

Opencv数据类型

一、由一个错误引出 错误信息如下: OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1 || type == CV_64FC1 ||type == CV_32FC2 || type == CV_64FC2)) in gemm, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/matmul.cpp, l…
暂无图片
编程学习 ·

【牛客网】写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

题目 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 需要掌握 1、异或运算 两个数不相同,结果为1。两个数相同,结果为0。 2、与运算 两位同时为“1”,结果才为“1”,否则为0 3、左移 将一个二进制操作数对象按指定的移动位数向左移,左边溢…
暂无图片
编程学习 ·

Java数据类型

数据类型 Java属于一种强类型语言 什么是强类型语言? 即要求变量的使用需要严格符合规定,要求所有变量都必须先定义后再使用,若不按规定就会报错! Java的数据类型分为两类 基本类型(primitive type) Java语言提供了八种基本类型:六种数字类型(四个整数型,两个浮点型),…
暂无图片
编程学习 ·

css3属性选择器

属性选择器 基本用法选择符 简介E[att] 选择具有att属性的E元素E[att=val] 选择具有att属性且属性值等于val的E元素E[att^=“val”] 匹配具有att属性、且值以val开头的E元素E[att$=“val”] 匹配具有att属性、且值以val结尾的E元素E[att*=“val”] 匹配具有att属性、且值中含有…