我的目標是取一個字符串(本例中爲密碼)找到它的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 –