所以我让用户输入密码来从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函数。
感谢任何帮助。
答案 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();
感谢。