私の目標は、文字列(この場合はパスワード)をMD5ハッシュにしてbase64に変換することでした。これは、ログオンを自動化しようとしているブラウザによって行われる暗号化の最初の部分です。パスワード "test"をテストすると、うまくいっています。しかし、 "asdf"を試してみると、私は異なったハッシュ値を得ています。 MD5ハッシュは常に正しいので、それがbase64変換パートの問題であることはわかっています。あなたは「ASDF」(912ec803b2ce49e4a541068d495ab570)のMD5ハッシュを見つけることによって、「正しい」出力を確認し、HEXボックスhere.Base64変換がJava Base64ライブラリで正しくない結果になった
パスワードで「テスト」https://ideone.com/SmaNsR
リンクを下記のコードのリンクにそれを貼り付けることができますjrtapsellの勧告、サンプルの入力と出力パー:「空自」と以下のコードのためのパスワードで/ OOSrmV
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());
}
}
EDITを(のみ2つのリンクを投稿することができます)。
入力: "テスト"
マイプログラム:CY9rzUYh03PK3k6DJie09gの==
それがどうあるべきか:CY9rzUYh03PK3k6DJie09gの==
入力: "空自" 私のプログラム:AJEuyDss5J5KVBaNSVq1cA ==それがどうあるべきか :kS7IA7LOSeSlQQaNSVq1cA ==
予想される入力と出力を質問に追加して、より簡単に比較できるようにしてください。 – jrtapsell
16進数で16進数でエンコードしてからbase64でエンコードするのはなぜですか? –
@ElliottFrisch MD5はすでにbase64でエンコードされていますので、デコードしてbase64でエンコードします。このプロセス全体をなぜ尋ねるのかは、[このサイト](https://pschool.aaps.k12.mi.us/public/)に自動的にログインできるアプリを構築しようとしているためですそのサイトが資格情報を送信する方法です。 私がやろうとしているプロセスhex_md5> base64_md5 –