我不熟悉 Java。
return Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.DEFAULT);
在 DEFAULT 上,我收到“DEFAULT 无法解析或不是字段”
我从一个网站上得到了代码块,上面写着“下面的 Java 代码使用了来自 Android SDK 的 base64 util 类,但你可以像使用来自 Apache Commons 的那样替换它”,我很确定这是问题所在,缺少的实用程序类。
所以我点击了它并到达那里......O.o
我看到一堵代码墙,没有关于如何处理它的上下文。我需要代码与 C# 代码匹配并给出相同的结果,因此切换到另一种格式不是解决方案。我想我必须实现那个 util 类,但我没有第一条线索实际需要什么。
最佳答案
以下是您对代码墙所做的操作:由于您正在尝试使用 encodeToString
,因此您搜索 encodeToString
以查看是否存在具有该名称的方法。这段代码中没有。但是,如果该类具有定义该方法的父类(super class),则该类中可能仍然存在一个。所以你看看这个类是否有父类(super class),它有:
public class Base64 extends BaseNCodec {
所以现在您必须尝试找到BaseNCodec
的代码。没有指向它的超链接,但您可以检查 URL,查找 Base64
,然后尝试将 Base64
替换为 BaseNCodec
以查看是否URL 遵循相同的格式。这样可行。那个类确实有encodeToString
:
/**
* Encodes a byte[] containing binary data, into a String containing characters in the Base-N alphabet.
* Uses UTF8 encoding.
*
* @param pArray
* a byte array containing binary data
* @return A String containing only Base-N character data
*/
public String encodeToString(final byte[] pArray) {
return StringUtils.newStringUtf8(encode(pArray));
}
不要担心正文,只看 javadoc 和参数。与 Android 版本不同,只有一个参数。没有“flags”参数,并且由于在 Android 上 flags 参数是默认值,您可以猜测缺少 flags 参数不会成为问题。您应该能够使其仅使用 byte[]
参数。
但是有一个问题:Apache 版本不是 static
,这意味着 Base64.encodeToString
将不起作用。您需要 Base64
的实际实例。要弄清楚你想要什么,你需要回到 Base64
代码并查看构造函数;然后查看每个构造函数的 Javadoc,并弄清楚您想要什么。
查看 Android 的 Javadoc 也会有所帮助。从 http://developer.android.com/reference/classes.html
开始,寻找 Base64
类。您可以在那里找到 encodeToString
方法。这需要一个 flags
参数,虽然该方法没有详细说明标志的含义,但您可以向上滚动并查看有哪些不同的标志可供您使用。一个是 URL_SAFE
。由于说明告诉您使用 DEFAULT
,这意味着它们不希望您使用 URL_SAFE
选项。这很重要,因为 Apache 版本中的一些构造函数为您提供了是否使用 URL 安全编码的选项;不要,除非您认为上述网站是错误的。
我不知道您需要编写什么确切的代码。但这应该可以帮助您入门,并让您了解将来如何自己研究此类问题。
关于java - 如何让 base64.default 在 Java 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553817/