fork(1) download
  1. import java.security.MessageDigest;
  2. import java.security.NoSuchAlgorithmException;
  3. import java.util.Arrays;
  4.  
  5. class Ideone {
  6.  
  7. /** 解析したいMD5ハッシュ */
  8. private static final byte[] TARGET = decodeHex("ab56b4d92b40713acc5af89985d4b786");
  9.  
  10. /** ループ回数 */
  11. private static final long CHALLENGE_MAX = Long.parseLong("zzzzzz", Character.MAX_RADIX);
  12.  
  13. private static MessageDigest digest;
  14.  
  15. public static void main(String[] args) {
  16.  
  17. String challenge;
  18. for (long i = 0; i < CHALLENGE_MAX; i++) {
  19. challenge = Long.toString(i, Character.MAX_RADIX);
  20. byte[] digest = getDigest().digest(challenge.getBytes());
  21.  
  22. if (Arrays.equals(TARGET, digest)) {
  23. System.out.println("やりました");
  24. System.out.println("答えは " + challenge);
  25. break;
  26. }
  27. if (i % 1000000 == 0) {
  28. System.out.println(i + "回目の試行..." + challenge);
  29. }
  30. }
  31. }
  32.  
  33. /**
  34.   * メッセージダイジェストのインスタンスを取得
  35.   *
  36.   * @param algorithm アルゴリズム
  37.   * @return
  38.   */
  39. private static MessageDigest getDigest() {
  40. if (digest != null) {
  41. return digest;
  42. }
  43. try {
  44. return digest = MessageDigest.getInstance("MD5");
  45. throw new RuntimeException(e.getMessage());
  46. }
  47. }
  48.  
  49. /**
  50.   * 16進数文字列をバイト配列にする
  51.   *
  52.   * @param str
  53.   * @return
  54.   */
  55. public static byte[] decodeHex(String str) {
  56. final char[] data = str.toCharArray();
  57. final int len = data.length;
  58. final byte[] out = new byte[len >> 1];
  59. // two characters form the hex value.
  60. for (int i = 0, j = 0; j < len; i++) {
  61. int f = Character.digit(data[j], 16) << 4;
  62. j++;
  63. f = f | Character.digit(data[j], 16);
  64. j++;
  65. out[i] = (byte) (f & 0xFF);
  66. }
  67. return out;
  68. }
  69. }
  70.  
Time limit exceeded #stdin #stdout 5s 380672KB
stdin
Standard input is empty
stdout
0回目の試行...0
1000000回目の試行...lfls
2000000回目の試行...16v7k
3000000回目の試行...1satc
4000000回目の試行...2dqf4