当前位置: 首页 > 知识库问答 >
问题:

使用不同的Base64库时数据不匹配

汤兴生
2023-03-14

目前通过org.apache.commons.codec.binary.Base64库使用Base64转换。 这是作为我们拥有的一些较老的令牌生成的一部分实现的,运行良好。 我们目前正在尝试放弃这个库,坚持在UTILS下的build Base64库中使用Java 8的。 但是由于如下所示的字符不匹配,这不能工作。 有没有一种方法来克服这个问题(除了使用regex,我绝对不想弄乱它)? 请指教。 谢谢。

String value1 = org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(aByteArray);
String value2 = java.util.Base64.getEncoder().encodeToString(aByteArray);

使用org.apache.commons.codec.binary.base64库时的示例结果。

1111111111_22222_Some // value1

使用java.util.base64库时的示例结果。

1111111111/22222/Some= // value2 

注意/和_之间的区别,加上缺少的=符号。 在不同的记号中,您会看到不同的符号,例如+符号,-sign等等。

我尝试了没有填充的选项,并为传递的字节数组设置StandardCharsets.utf_8,最终得到相同的不匹配结果。

共有1个答案

辛意智
2023-03-14

org.apache.commons.codeC.binary.base64.EncodeBase64URLSafeString(aByteArray);创建一个url安全的base64变体。 (将_和-作为编码的一部分)

使用java.util.base64.GetEncoder().EncodeToString(aByteArray);将创建“标准”base64,其中“/”“=”和“+”作为编码的一部分。 那将不是url安全的。

Base64类对于url安全编码变体有一个不同的编码器(Base64.GetUrlenCoder()):

java.util.Base64.getUrlEncoder().encodeToString(aByteArray) 

编辑:

删除您可以使用的可选填充

java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(aByteArray);
 类似资料:
  • 问题内容: 例如,mysql引用表名使用 注意` 其他数据库是否曾经使用过不同的char来引用其表名 问题答案: 引号的这种使用称为定界标识符。这是SQL的重要组成部分,因为否则您将不能使用以下标识符(例如表名和列名): 包含空格:“我的桌子” 包括特殊字符和标点符号:“我的表格” 包括国际字符:“私のテーブル” 区分大小写:“ MyTable” 匹配SQL关键字:“表” 标准SQL语言对定界标识

  • 我使用Mongoose将小尺寸的base64编码图像(每个大约100-200k)直接发布到mongodb中。在存储之前,我可以看到内容与从客户端发送的内容相同。但是查询的base64字符串和输入的不一样?你知道我错过了什么吗? 存储在req.body.image中的数据字符串以“/9j/4AAQSKZJ...”开头,但从mongo shell中我看到了不同。是Bindata的子类型0造成的吗? 谢

  • 问题内容: 您将如何在不同的环境中处理跨数据库查询。例如,db1-development和db2-development,db1-production和db2-production。 如果要在从db2到db1的开发中进行跨数据库查询,则可以使用完全限定的名称,即[db1-development]。[schema]。[table]。但是,如何在不同环境之间维护查询和存储过程?[db1-develop

  • 出于安全原因,我希望在Redis中使用类似的代码,因为目前我可以使用,但我必须将其添加到每个希望连接到Redis的应用程序中。(至少有一种方法可以为使用多个密码吗? 我可以用一个应用程序连接到一个数据库,但是这个应用程序也可以切换到另一个数据库。(我至少可以用某种方法阻止这种切换吗?) 出于性能原因,我希望避免并行运行多个redis实例。

  • 我使用DBCP池,我想使用testOnBrow和testOnBack来测试连接是否仍然有效。 不幸的是,我必须设置属性validationQuery才能使其工作。 问题:validationQuery中应该有什么值? 我知道:validationQuery必须是一个SQL SELECT语句,它至少返回一行。 问题是我们使用各种数据库(DB2、Oracle、hsqldb)。

  • 编辑:我今天早上意识到这个异常似乎与Spring引导执行器有关,它似乎只在生产中运行,而不是在从Spring工具套件中启动prohect时运行。(请参见文章末尾的异常跟踪) 主数据库是使用jpa访问的,关于该数据库的所有内容都在一个特定的包中。 另一个数据库用于直接使用Hibernate访问遗留bean。关于那些遗留bean的一切都在一个不同的包中。 有些bean在两个包中具有相同的名称,但是由于

  • 我有两个具有经度和纬度值的数据帧,我想从数据帧#2中提取值(例如数据帧#2的第三列),这些值与数据帧1的列匹配...例如,数据帧1有两列(、),数据帧2有三列(、和一些值)...我想在数据帧1中添加第三列,其中的值对应于两个数据帧中两列完全匹配的值,类似于和...在、不匹配的对中,我希望添加,以便第三列(我要添加到数据。帧1)的长度为=。我尝试了merge函数,但在将的两列与的列进行匹配时遇到了困

  • 问题内容: 我收到以下错误: 但是我看不到哪个参数错误? 这是我使用的代码。 我已经添加并删除了,但出现了相同的错误。 问题答案: 您将月份和日期交换了: 否则将永远不会适合month参数的范围。 随着并以正确的顺序解析的工作原理: 您无需添加;可以正确解析较短的数字: