我的目标是取一个字符串(本例中为密码)找到它的MD5 Hash,并将其转换为base64。这是我尝试自动登录到浏览器的加密的第一部分。当我测试密码“测试”时,它通过罚款。但是,尝试“asdf”时,我得到不同的哈希值。我知道这是base64转换部分的问题,因为MD5散列总是正确的。您可以通过寻找“ASDF”(912ec803b2ce49e4a541068d495ab570)的MD5哈希看到“正确”的输出并粘贴到这一点的HEX箱here.Base 64转换导致Java Base64库的结果不正确
的链接下面的代码以“测试”带口令https://ideone.com/SmaNsR
链接下面用“ASDF”的代码受密码/ OOSrmV(只能张贴2个链接)
class myClass {
public static void main(String[] args) {
String password = "asdf";
try {
System.out.println(password);
password = (passwordencrypt(password));
System.out.println(password);
} catch (NoSuchAlgorithmException ex) {
System.out.println("oops");
}
password = base16to64(password);
System.out.println(password);
}
public static String passwordencrypt(String password) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] b = md.digest();
StringBuffer sb = new StringBuffer();
for (byte b1 : b) {
sb.append(Integer.toHexString(b1 & 0xff).toString());
}
return sb.toString();
}
public static String base16to64(String hex){
return Base64.getEncoder().encodeToString(new BigInteger(hex, 16).toByteArray());
}
}
编辑:每jrtapsell的推荐,样品输入和输出。
输入: “测试”
我的程序:CY9rzUYh03PK3k6DJie09g ==
它应该是什么:CY9rzUYh03PK3k6DJie09g ==
输入: “ASDF” 我的程序:AJEuyDss5J5KVBaNSVq1cA == 它应该是什么:kS7IA7LOSeSlQQaNSVq1cA ==
您可以添加预期的输入和输出到问题,所以他们可以更容易地比较 – jrtapsell
为什么十六进制编码,然后base64编码? –
@ElliottFrisch MD5已经是base64编码了,所以我想解码它,并用base64编码。如果你问为什么这整个过程,这是因为我正在尝试构建一个可以自动登录到[本网站](https://pschool.aaps.k12.mi.us/public/)的应用程序,而且是该网站传输证书的方式。 我试图做的过程hex_md5> base64_md5 –