如何让base64.default在Java中工作?

时间:2015-04-10 05:06:52

标签: java eclipse

我不熟悉Java。

return Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.DEFAULT);

在默认情况下,我得到" DEFAULT无法解决或者不是字段"

我从一个注意到的网站获得了代码块,"下面的java代码使用了android SDK中的base64 util类,但是你可以将它替换为apache commons"中的一个,我和#34;我非常肯定是问题,缺少实用工具类。

http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/Base64.java?view=markup

所以我点击它并到达那里...... O.o

我看到一段代码,没有关于如何处理它的上下文。我需要代码与C#代码匹配并给出相同的结果,因此切换到另一种格式不是解决方案。我想我不得不恭维那个类,但我还没有找到实际需要的第一个线索。

3 个答案:

答案 0 :(得分:1)

以下是您对代码墙的处理方式:由于您正在尝试使用encodeToString,因此您需要搜索encodeToString以查看是否存在'方法那个名字。在此代码中没有一个。但是如果类有一个定义方法的超类,那么类中可能仍然存在一个。所以你看看这个类是否有一个超类,它确实:

public class Base64 extends BaseNCodec {

所以现在你必须尝试找到BaseNCodec的代码。没有超链接,但您可以检查网址,查找Base64,然后尝试将Base64替换为BaseNCodec,以查看网址是否采用相同的格式。这样可行。那个班级 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版本不同,只有一个参数。没有"标志"参数,因为在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安全编码的选项;不要,除非您认为上述网站有误。

我不知道你需要编写什么样的代码。但这应该让你开始并让你知道如何在将来自己研究这样的问题。

答案 1 :(得分:0)

它告诉您,您可以使用Apache Commons Codec库对byte []而不是android库进行base64编码。

这是您关联的课程的文档:http://commons.apache.org/proper/commons-codec/apidocs/index.html?org/apache/commons/codec/binary/Base64.html

return Base64.encodeBase64( encrypt(plainTextbytes,keyBytes, keyBytes) );

答案 2 :(得分:0)

使用来自Apache Commons Base64的return Base64.encodeBase64String(byte[]);以String形式返回加密,它还将解决PKCS5Padding和PKCS7Padding之间的任何填充问题。