<p><pre><code>  &gt; MD5() isn&#x27;t a primitive, it is an entire
  &gt; implementation.
</code></pre>
No, it&#x27;s a primitive. From <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cryptographic_primitive" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cryptographic_primitive</a>:<p><pre><code>  Commonly used primitives
  One-way hash function, sometimes also called
  as one-way compression function—compute a reduced
  hash value for a message (e.g., SHA-256)
</code></pre>
Furthermore:<p><pre><code>  Cryptographic primitives are one of the building
  block of every crypto system, e.g., TLS, SSL, SSH,
  etc.
  ...
  Combining cryptographic primitives to make a security
  protocol is itself an entire specialization. Most
  exploitable errors (i.e., insecurities in crypto
  systems) are due not to design errors in the
  primitives (assuming always that they were chosen
  with care), but to the way they are used, i.e. bad
  protocol design and buggy or not careful enough
  implementation.
</code></pre>
This last bit is usually what is meant by &quot;don&#x27;t roll your own crypto&quot;. Granted, the parent said &quot;encryption&quot;, but he meant &quot;crypto&quot;, and I thought that was quite clear from the context.