What is special about the Hashcat tool to be so fast? – Digitalmunition

Home Forums What is special about the Hashcat tool to be so fast?

This topic contains 1 reply, has 2 voices, and was last updated by  SourcecodeDeleted 1 month, 1 week ago.

  • Author
  • #355323


    A few weeks ago I was curious to know how fast the hashcat tool was compared to a code I wrote in Java.


    My Java code: 15 H/s

    Hashcat: 360 H/s

    I was impressed with the speed gain, in a process that would take 24 hours with my Java code, in the hashcat it would only take 1 hour. As I have other Java projects that also perform a lot of calculations and have a long execution time, I would like to know a way to better the speed of my processes like this.

    Edit: I did the test and while in Java the code runs in 16 sec, in C the same code takes 56 seconds.

    It seems to me that changing the language to C is not a better choice.

    Test algorithm used: make 40 billion logical comparisons (if).

  • #355324


    Java is a memory whore.

    Hashcat can use the GPU too.

  • #355325


    Maybe just because it’s coded in C and not java. Some high level languages are just very slow…

  • #355326


    For your edit, I believe it’s because you don’t master the C language as you master Java (probably) because structurally C is created to be largely faster than any other language, because running at a very low level (and yes I know that C preceded all of them, it’s a figure of speech).

    It’s not necessarily a bad or a good thing, it’s just as it’s but for hashcat, it’s written in C and I believe it’s good C, well written and very optimized.

    Also I just saw on their website then need a GPU so I believe they do their calculation on GPU not CPU, maybe you could try to recode your stuff for GPU and see if there is any difference (there should be, if there is no difference, your code have a problem)

  • #355327


    Hashcat is written in C.

    Simply put, if speed is your top priority then don’t write these programs in Java.

    Java has a lot of unnecessary overhead. It doesn’t lend itself to this type of application where you are doing lots of raw math.

  • #355328


    Hashcat uses the GPU and it’s written in C

  • #355329


    >Java being slow is a myth?

    Yes it is a myth. You can write very fast code in Java. Optimization is a difficult task, be in c, java or any other languages. It’s true that’s optimized c code will always be faster than optimized Java. However, Java can be very close (except with heavy memory load/management, Java’s garbage collector will always be slower than manual and optimized memory management)

    Hashcat is fast because it uses the GPU. It also makes assumptions/approximation to run faster. E.g. hashcat optimized code (-O), the length of the password to bruteforce is limited in length. Another example to illustrate may be the inverse square root: the standard implementation would be 1/sqrt(x), but look at the fast inverse square root https://en.m.wikipedia.org/wiki/Fast_inverse_square_root. It was initially coded for Quake 3, and it is way faster than the naive implementation, but it is an approximation, but sufficient for Quake 3’s use.

    Java has bindings to opencl, so you may be able to write code targeting the GPU ,too. I never tried it though, no idea how it performs.

    Switch to c? …. Don’t, the learning curve is high (pointers and memory management) and your Java habits will handicap you. (I make the assumption you are a hardcore Java developer 🙂)

  • #355330


    Can you share your code for comparison?

  • #355331


    I’d put money on Java code that uses the graphics card is roughly 10x faster then the fastest C code that just uses the cpu.

    When used properly graphics cards can do things a hundred times faster (at least) over the CPU.

You must be logged in to reply to this topic.