CryptoJS Example

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/md5.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<button>
start (check browser console!)
</button>

JavaScript

const hash = '897aaf7db80d8c03cdf7b1bacceabc18';
const salt = 'COLb';
/* needle: 375291234567 */

const startNumber = 1000000;
const endNumber = 9999999;
const codes = ['29', '44', '33', '25'];

function* Brute(salt) {
  var n = startNumber;
  while (true) {
    n++;
    yield CryptoJS.MD5(salt + n).toString()
  };
}

const BruteGenerators = async (salt) => {
  let f = Brute(salt),
    k, nf;

  for (k = 0; k < endNumber; k += 1) {
    nf = f.next().value;
    if (k % 1000000 === 0) {
      console.log('next 100k: ' + salt + (k + 1 + startNumber));
    }
    if (nf === hash) {
      return Promise.resolve(salt + (k + 1 + startNumber));
    }
  }
  return Promise.reject('no matches for: ' + salt + '*******')
}

const start = async () => {
  //const start = process.hrtime.bigint();
  let result;

  for (let code of codes) {
    try {
      result = await BruteGenerators(salt + '375' + code);
      if (result) {
        break;
      }
    } catch (e) {
    	console.error(e)
    }
  }
  if (result) {
    console.log({ result })
  } else {
    console.log('not found :(')
  }

  //const end = process.hrtime.bigint();
  //const seconds = (end - start) / BigInt(1e9)
  //const nanoSeconds = (end - start) - (seconds * BigInt(1e9));
  //console.log(`Brute took ${seconds}.${nanoSeconds} seconds`);
}

const [button] = document.getElementsByTagName('button');
button.onclick = () => {
	console.log('started')
  start();
};