如何将“二进制字符串”转换为Base64?

4
我已经按照https://dev.twitter.com/docs/auth/creating-signature的步骤走到最后,但我找不到如何将“二进制字符串”编码为base64(最后一步)。我想先尝试在线转换器,但它们没有给出我要显示的字符串“tnnArxj06cWHq44gCs1OSKk/jLY=”。我已经尝试了以下网站:http://www.motobit.com/util/base64-decoder-encoder.asphttp://www.hash-cracker.com/base64.php#anchorhttp://www.opinionatedgeek.com/dotnet/tools/Base64Encode/,但都没有给出那个字符串。我将使用Java语言。但我认为所有我搜索的Java工具都会给出与在线转换器相同的结果。将“二进制字符串”编码为base64需要做什么?

基于网络的工具在二进制输入/输出方面表现不佳。它必须是基于网络的吗? - Chris Eberle
1
使用 http://commons.apache.org/codec/api-release/org/apache/commons/codec/binary/Base64.html ? - user180100
它不一定要基于Web。我只是试图弄清楚每个步骤以及我需要做什么。 - Dave
3个回答

6
使用这些在线工具的问题不在于base64转换,而是将十六进制字符串解析为字节数组。在你的实际代码中,这不会成为问题,因为它将是另一个阶段的输出。为了证明这一点,这里有一些示例Java代码,使用公共领域的base64编码器
public class Test {
    public static void main(String[] args) throws Exception {
        byte[] data = { (byte) 0xB6, (byte) 0x79, (byte) 0xC0, (byte) 0xAF, 
                (byte) 0x18, (byte) 0xF4, (byte) 0xE9, (byte) 0xC5, 
                (byte) 0x87, (byte) 0xAB, (byte) 0x8E, (byte) 0x20, 
                (byte) 0x0A, (byte) 0xCD, (byte) 0x4E, (byte) 0x48, 
                (byte) 0xA9, (byte) 0x3F, (byte) 0x8C, (byte) 0xB6 };

        String text = Base64.encodeBytes(data);
        System.out.println(text);
    }
}

输出:tnnArxj06cWHq44gCs1OSKk/jLY=

1
好的,我明白了。谢谢。所以在这里:http://ostermiller.org/calc/encode.html 我从"b679c0af18f4e9c587ab8e200acd4e48a93f8cb6"转换为十六进制。然后编码为base64,结果是正确的"tnnArxj06cWHq44gCs1OSKk/jLY="。我之前没有看到的一件事是十六进制的部分。 - Dave

0

您可以使用此链接将二进制字符串转换为Base64 https://cryptii.com/pipes/binary-to-text

以下是将二进制字符串转换为Base64字符串的示例: enter image description here

以下是将普通字符串转换为Base64字符串的另一个示例

enter image description here


1
我不明白这个回答与页面顶部的问题有何关联,但它应该有。请根据[答案]进行[编辑]或删除回答。否则,它可能会被标记为“不是答案”并被删除。 - Yunnosch

0
Java 8 推出了 java.util.Base64 包,用于帮助将字节编码为 Base64,以及反之。
import java.util.Base64;


byte[] bytes = string.getBytes();

// returns byte[]
Base64.getEncoder().encode(bytes);

// returns String
Base64.getEncoder().encodeToString(bytes);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接