public static int[] createHashes(byte[] data,int hashes,MessageDigest digestFunction){
  int[] result=new int[hashes];
  int k=0;
  byte salt=0;
  while (k < hashes) {
    byte[] digest;
    digestFunction.update(salt);
    salt++;
    digest=digestFunction.digest(data);
    for (int i=0; i < digest.length / 4 && k < hashes; i++) {
      int h=0;
      for (int j=(i * 4); j < (i * 4) + 4; j++) {
        h<<=8;
        h|=((int)digest[j]) & 0xFF;
      }
      result[k]=h;
      k++;
    }
  }
  return result;
}

public static int [ ] createHashes ( byte [ ] data , int hashes , MessageDigest digestFunction ) { int [ ] result = new int [ hashes ] ; int k = 0 ; byte salt = 0 ; while ( k < hashes ) { byte [ ] digest ; digestFunction . update ( salt ) ; salt ++ ; digest = digestFunction . digest ( data ) ; for ( int i = 0 ; i < digest . length / 4 && k < hashes ; i ++ ) { int h = 0 ; for ( int j = ( i * 4 ) ; j < ( i * 4 ) + 4 ; j ++ ) { h <<= 8 ; h |= ( ( int ) digest [ j ] ) & 0xFF ; } result [ k ] = h ; k ++ ; } } return result ; }
generates digests based on the contents of an array of bytes and splits the result into 4 - byte int ' s and store them in an array . the digest function is called until the required number of int ' s are produced . for each call to digest a salt is prepended to the data . the salt is increased by 1 for each call .
