【问题标题】:Ruby base 64 decoding for Java base 64 encoding用于 Java base64 编码的 Ruby base64 编码
【发布时间】:2019-02-14 18:35:30
【问题描述】:

我有一个使用 java 编码的字符串

data = new String(Base64.getEncoder().encode(encVal), StandardCharsets.UTF_8);

我正在接收此编码数据作为 API 响应。我想用 ruby​​ 对它进行 base64 解码。我正在使用

Base64.strict_decode64(data)

为此。但这不起作用。谁能帮我解决这个问题?

【问题讨论】:

  • 如果您包含一个这样的 base64 编码字符串的样本会有所帮助,因此 Ruby 回答者不必为了测试解决方案而使用 Java。还有,这个问题和aes有什么关系?
  • "KO7USRGwfmQbw3RXI6EqYJ72hnpmCzFaQbjNd1EWplus1RNKUELopYsZ9z5YyKplusQpCGstFkuwHJQ20F4R9H5u5EXu1f6DhnakteAx9hbiIEqygRdBuDM3ftrVukETHICwFD/eGo6TdyqRH5K5yjCzgjmk2TKwu5dkPS4Dm4OJF4jkB1yX/i6BMIwbXIplusrbsRYGujybxaajtTe/rXIKZbs6X5Yi2dbJuRYtTnVkg4dHZYlibplusJsoKYBTQSWNplusKXgyIQ0" .
  • 好吧,require 'base64'; Base64.decode64(data) 应该可以工作,但是我要把垃圾拿出来,所以我只能希望你把垃圾放进去。严格的解码器抱怨长度不能被 4 整除,并且会做与decode64 相同,如果你用= 填充它。
  • strict_decode64 还将提高 ArgumentError 用于尾随换行符。如果您想继续使用strict_decode64 而不是常规的decode64,可以尝试Base64.strict_decode64(data.chomp)

标签: java ruby base64


【解决方案1】:

你的 Java 代码是正确的:

byte[] encVal = "Hello World".getBytes();
String data = new String(Base64.getEncoder().encode(encVal), StandardCharsets.UTF_8);
System.out.println(data); // SGVsbG8gV29ybGQ=

SGVsbG8gV29ybGQ= 使用多种工具正确解码,例如https://www.base64decode.org/.

您观察到垃圾字符解码您的值很可能是由于创建 byte[] 时出错。可能您在创建byte[] 时必须指定正确的编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2012-10-18
    相关资源
    最近更新 更多