How to create md5 hash in bash in Mac OS X

How can you create an md5 hash for a string on a mac using bash? md5sum does not exist in my environment. I did a man for md5 but I'm confused about what that really does.

md5 "string" 

does not return a hash.

0

7 Answers

This should work -

[jaypal:~/Temp] echo "this will be encrypted" | md5 72caf9daf910b5ef86796f74c20b7e0b 

or if you prefer here string notation then -

[jaypal:~/Temp] md5 <<< 'this will be encrypted' 72caf9daf910b5ef86796f74c20b7e0b 

UPDATE:

Per the man page, you can play around with any of the following options

-s string Print a checksum of the given string. -p Echo stdin to stdout and append the checksum to stdout. -q Quiet mode - only the checksum is printed out. Overrides the -r option. [jaypal:~/Temp] md5 -s 'this will be encrypted' MD5 ("this will be encrypted") = 502810f799de274ff7840a1549cd028a [jaypal:~/Temp] md5 -qs 'this will be encrypted' 502810f799de274ff7840a1549cd028a 

Note: MD5 always produces the same hash. The reason you find the output different from the example given above is due to a point that has been made in the comments. The first two examples use the trailing newline character to produce the hash. To avoid that, you can use:

[jaypal:~/Temp] echo -n "this will be encrypted" | md5 502810f799de274ff7840a1549cd028a 

For example, if you use echo -n "string" | md5 (note the -n option), you get b45cffe084dd3d20d928bee85e7b0f21. But, if you use echo "string" | md5, you get b80fa55b1234f1935cea559d9efbc39a.

Or, verify it with the shell:

➜ [jaypal:~/Temp] [ $(echo "HOLA" | md5) = $(echo "HOLA" -n | md5) ]; echo "$?" 1 # 1 -> False. Hence, the result from echoing "HOLA" toggling the -n flag # outputs different md5 checksums. 
3

To achieve what you asked:

md5 -s string 

outputs: MD5 ("string") = b45cffe084dd3d20d928bee85e7b0f21

1

OSX uses md5 but most unices use md5sum

Here is a section of rvm's rvmrc validation code which finds the correct md5 binary and wraps it.

__rvm_md5_for() { if builtin command -v md5 > /dev/null; then echo "$1" | md5 elif builtin command -v md5sum > /dev/null ; then echo "$1" | md5sum | awk '{print $1}' else rvm_error "Neither md5 nor md5sum were found in the PATH" return 1 fi return 0 } 

( Code from )

The correct way of doing that would be echo -n string | md5 instead of echo "string" | md5. (I am using zsh)

Convert the md5 hash given by echo -n string | md5 you will get back string.

md5 -s string also works which is already pointed out here.

λ [~] → echo "string" | md5 b80fa55b1234f1935cea559d9efbc39a λ [~] → echo -n string | md5 b45cffe084dd3d20d928bee85e7b0f21 λ [~] → md5 -s string MD5 ("string") = b45cffe084dd3d20d928bee85e7b0f21 

All the other answers are valid. I would like to also propose openssl as well:

➜ echo 'this will be hashed' | openssl md5 55be2dc2df2c1cc7bad72a0ecb338841 

which is equivalent to the following

➜ echo 'this will be hashed' | openssl dgst -md5 # or ➜ openssl md5 <<< 'this will be hashed' # or ➜ echo 'this will be hashed' | md5 

From the command line:

md5 <<< "String to hash" 8a0a39505c5753ff64a0377ab0265509 
1

You may want to use some randomness here, otherwise the password will always be the same. This should work:

dd if=/dev/random count=20|md5 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like