Linux / Unix: Generate A MD5 String

last updated in Categories , ,

I need to generate a md5 hash for given string. It will be used by shell script to generate keys for remote web service or cryptographic application. How do I generate a md5 hash based on any input string under Linux or Unix like operating systems?

You can use md5sum command to compute and check MD5 message digest. This is a default tool on most modern Linux distributions. It generate a md5 hash for given string or words or filenames.


Create a md5 string using md5sum command

Use the following syntax:

echo -n "Your-String-Here" | md5sum

In this example create a md5 hash for wpblog string that can be used by memcached server

 echo -n "wpblog" | md5sum

Sample outputs:

6afedb7a8348eb4ebdbe0c77ef92db4c -

You can store the same in a bash shell variable called hash as follows:

hash="$(echo -n "$md5" | md5sum )"
echo "$hash"
Recommended readings


Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

11 comment

  1. Reading from standard input:
    $ md5sum –

    a little script:

    echo $1
    echo $1 | md5sum

    $ ./md5 hallo
    aee97cb3ad288ef0add6c6b5b5fae48a –

    The “-” declares, that this message comes from standard input

    1. Beware this script! You should use the “-n” option for echo as shown in the main article. Otherwise, a newline is appended to the output of the echo command and your hash will not be as advertised (unless you really want the newline).

      echo $1
      echo -n $1 | md5sum

      $ ./md5 hallo
      598d4c200461b81522a3328565c25f7c –

      Not “aee97cb3ad288ef0add6c6b5b5fae48a” as shown above.

      1. If your hash contains a “–” at the end. Well, seriously this is not correct. I suggest you use this command instead to get rid of that character.

        echo -n "samplestring" | md5sum | cut -d"-" -f1 -

  2. I love this site – it’s got more simple, helpful tips for *Nix amateurs (like me!) than I’ve ever seen elsewhere. But, for the life of me, I can’t find a site search anywhere. I was looking for this page, because I’d forgotten the syntax to generate an encrypted password. What’s up with no site search…? If I wanted to search Google, I’d search Google. Anyway, thanks for all of the help. Great site.

  3. Unfortunately, this command creates completely wrong MD5 hashes under certain circumstances, for example if the string to be hashed contains both uppercase and lowercase letters or symbols.

    Let’s take the string “8FdBd35E” as an example. Its correct MD5 hash is

    and PHP indeed creates the correct MD5 hash:
    root@corp6 [~]# php -r “echo md5(‘8FdBd35E’);” | xargs echo

    However, the “md5sum” shell command creates a completely different MD5 hash:

    root@corp6 [~]# echo “8FdBd35E” | md5sum
    bf84cb9630c7748d0f337c98c2644051 –

    Also, checked it with thousands other strings and md5sum creates an incorrect MD5 hash, so the command is not to be trusted.

    1. again, the add -n to remove the newline

      echo -n "8FdBd35E" | md5sum => 2a6b2d4c => 2a6b2d4c5fbd87fd896177a8fd12d4d1
      php -r "echo md5('8FdBd35E');" | xargs echo => 2a6b2d4c5fbd87fd896177a8fd12d4d1

  4. That’s because ‘echo’ appends a newline. I tried your command with the ‘-n’ option and it worked as expected.

  5. username=user

    hash_user="$(echo -n "$username" | md5sum )"
    hash_pass="$(echo -n "$password" | md5sum )"

    as me funciono gracias a tu post.
    hash_username=$(echo $hash_user | sed 's/ //g' | sed 's/-//g')
    hash_username=$(echo $hash_pass | sed 's/ //g' | sed 's/-//g')

    Still, have a question? Get help on our forum!