将字节数组转换为android中的Base64字符串

时间:2010-12-01 00:51:49

标签: java android base64

所以我让用户输入密码来从Android应用程序注册。

在将密码保存到服务器上的数据库之前,我想将其转换为MD5单向散列并将其保存到数据库中。

MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    try {
        md.update(password.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    byte raw[] = md.digest();

如何将此字节数组转换为Base64字符串。我在一些论坛上看到android util包遗漏了Base64编码和解码,另一方面我在android开发者网站上看到了encodetoString函数。

感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

对于这样的基本实用程序类,由于API 8中有较晚的Base64实现,我会将the latest source from the AOSP git repo复制到我自己的应用程序包中。它使用API​​级别3进行编译。

这样,您可以使用与官方Android Base64实现相同的API在您的应用程序中编码,并保持与所有Android版本兼容。 API 8成为市场上最古老的Android版本,你只需删除你的包中的类版本,并将导入更新为官方android.util.Base64。

Eclipse提示:只需按照我在浏览器中提供给源的链接,按Ctrl-A选择所有代码,按Ctrl-C复制它,打开Eclipse,单击要创建类的包,按Ctrl-V。自动创建.java文件,并使用正确的包声明直接修改源。

答案 1 :(得分:3)

如果您希望应用程序在API级别8以下兼容,那么您可以引入第三方库来处理Base64编码。

Apache Commons Codec是您可以尝试的。它包含Base64编解码器:http://commons.apache.org/codec/api-release/index.html

答案 2 :(得分:1)

以下是我的做法...在我的问题上面的代码之后只是这段代码。

StringBuffer hexString = new StringBuffer();
    for (int i=0; i<raw.length; i++)
        hexString.append(Integer.toHexString(0xFF & raw[i]));
    password = hexString.toString();

感谢。