<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: hashing</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/hashing.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2010-01-04T13:24:50+00:00</updated><author><name>Simon Willison</name></author><entry><title>Design and code review requested for Django string signing / signed cookies</title><link href="https://simonwillison.net/2010/Jan/4/codereview/#atom-tag" rel="alternate"/><published>2010-01-04T13:24:50+00:00</published><updated>2010-01-04T13:24:50+00:00</updated><id>https://simonwillison.net/2010/Jan/4/codereview/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://groups.google.com/group/django-developers/browse_thread/thread/297e8b22006f7f3a"&gt;Design and code review requested for Django string signing / signed cookies&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Do you know your way around web app security and cryptography (in particular signing things using hmac and sha1)? We’d appreciate your help reviewing the usage of these concepts in Django’s proposed string signing and signed cookie implementations.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/code-review"&gt;code-review&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cryptography"&gt;cryptography&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hmac"&gt;hmac&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sha1"&gt;sha1&lt;/a&gt;&lt;/p&gt;



</summary><category term="code-review"/><category term="cryptography"/><category term="django"/><category term="hashing"/><category term="hmac"/><category term="python"/><category term="security"/><category term="sha1"/></entry><entry><title>Cryptographic Right Answers</title><link href="https://simonwillison.net/2009/Jun/11/cryptographic/#atom-tag" rel="alternate"/><published>2009-06-11T22:16:25+00:00</published><updated>2009-06-11T22:16:25+00:00</updated><id>https://simonwillison.net/2009/Jun/11/cryptographic/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html"&gt;Cryptographic Right Answers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Best practise recommendations for cryptography: “While some people argue that you should never use cryptographic primitives directly and that trying to teach people cryptography just makes them more likely to shoot themselves in their proverbial feet, I come from a proud academic background and am sufficiently optimistic about humankind that I think it’s a good idea to spread some knowledge around.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aes"&gt;aes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/colinpercival"&gt;colinpercival&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cryptography"&gt;cryptography&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;&lt;/p&gt;



</summary><category term="aes"/><category term="colinpercival"/><category term="cryptography"/><category term="hashing"/><category term="security"/></entry><entry><title>Bloom Filter Resources</title><link href="https://simonwillison.net/2008/Oct/19/bloom/#atom-tag" rel="alternate"/><published>2008-10-19T22:22:19+00:00</published><updated>2008-10-19T22:22:19+00:00</updated><id>https://simonwillison.net/2008/Oct/19/bloom/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://bitworking.org/news/380/bloom-filter-resources"&gt;Bloom Filter Resources&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A continuation of the discussion about how to transfer information about a large number of recently updated resources around in an efficient way, Joe provides working code illustrating a simple approach using bloom filters.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bloom-filters"&gt;bloom-filters&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/joe-gregorio"&gt;joe-gregorio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rest"&gt;rest&lt;/a&gt;&lt;/p&gt;



</summary><category term="bloom-filters"/><category term="hashing"/><category term="joe-gregorio"/><category term="rest"/></entry><entry><title>Hash Collisions (The Poisoned Message Attack)</title><link href="https://simonwillison.net/2008/Apr/4/hash/#atom-tag" rel="alternate"/><published>2008-04-04T19:24:36+00:00</published><updated>2008-04-04T19:24:36+00:00</updated><id>https://simonwillison.net/2008/Apr/4/hash/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/"&gt;Hash Collisions (The Poisoned Message Attack)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Demonstrates the MD5 weakness by providing two deliberately engineered PostScript documents with the same MD5 hash but radically different rendered output.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/collisions"&gt;collisions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/md5"&gt;md5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postscript"&gt;postscript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;&lt;/p&gt;



</summary><category term="collisions"/><category term="hashing"/><category term="md5"/><category term="postscript"/><category term="security"/></entry><entry><title>Consistent Hashing</title><link href="https://simonwillison.net/2008/Mar/18/consistent/#atom-tag" rel="alternate"/><published>2008-03-18T01:00:34+00:00</published><updated>2008-03-18T01:00:34+00:00</updated><id>https://simonwillison.net/2008/Mar/18/consistent/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/"&gt;Consistent Hashing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Beautifully clear explanation of consistent hashing, a simple technique that allows you to add new caching servers to a cluster without re-hashing your keys and hence invalidating all of your caches.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/caching"&gt;caching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/consistenthashing"&gt;consistenthashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;&lt;/p&gt;



</summary><category term="caching"/><category term="consistenthashing"/><category term="hashing"/><category term="scaling"/></entry><entry><title>In rainbows</title><link href="https://simonwillison.net/2007/Oct/23/dopplr/#atom-tag" rel="alternate"/><published>2007-10-23T22:39:15+00:00</published><updated>2007-10-23T22:39:15+00:00</updated><id>https://simonwillison.net/2007/Oct/23/dopplr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.dopplr.com/index.php/2007/10/23/in-rainbows/"&gt;In rainbows&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Dopplr generates a unique colour for each city using an MD5 hash. The colours are then used in subtle but intelligent ways throughout the design—right down to the favicon.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/colour"&gt;colour&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dopplr"&gt;dopplr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/favicons"&gt;favicons&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/matt-biddulph"&gt;matt-biddulph&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/matt-jones"&gt;matt-jones&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/md5"&gt;md5&lt;/a&gt;&lt;/p&gt;



</summary><category term="colour"/><category term="design"/><category term="dopplr"/><category term="favicons"/><category term="hashing"/><category term="matt-biddulph"/><category term="matt-jones"/><category term="md5"/></entry><entry><title>libketama</title><link href="https://simonwillison.net/2007/Apr/20/libketama/#atom-tag" rel="alternate"/><published>2007-04-20T06:50:51+00:00</published><updated>2007-04-20T06:50:51+00:00</updated><id>https://simonwillison.net/2007/Apr/20/libketama/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.last.fm/user/RJ/journal/2007/04/10/392555/"&gt;libketama&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A consistent hashing algorithm for memcache clients, from the team at last.fm.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://del.icio.us/deusx"&gt;Les Orchard&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lastfm"&gt;lastfm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/les-orchard"&gt;les-orchard&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memcache"&gt;memcache&lt;/a&gt;&lt;/p&gt;



</summary><category term="hashing"/><category term="lastfm"/><category term="les-orchard"/><category term="memcache"/></entry><entry><title>Stopping spambots with hashes and honeypots</title><link href="https://simonwillison.net/2007/Jan/23/spambots/#atom-tag" rel="alternate"/><published>2007-01-23T13:39:15+00:00</published><updated>2007-01-23T13:39:15+00:00</updated><id>https://simonwillison.net/2007/Jan/23/spambots/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.nedbatchelder.com/text/stopbots.html"&gt;Stopping spambots with hashes and honeypots&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ned’s analysis of how spambots work, along with some relatively simple tricks that should fool most of them.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/commentspam"&gt;commentspam&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ned-batchelder"&gt;ned-batchelder&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spam"&gt;spam&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spambots"&gt;spambots&lt;/a&gt;&lt;/p&gt;



</summary><category term="commentspam"/><category term="hashing"/><category term="ned-batchelder"/><category term="spam"/><category term="spambots"/></entry><entry><title>Schneier on Security: Cryptanalysis of SHA-1</title><link href="https://simonwillison.net/2005/Feb/19/schneier/#atom-tag" rel="alternate"/><published>2005-02-19T15:12:39+00:00</published><updated>2005-02-19T15:12:39+00:00</updated><id>https://simonwillison.net/2005/Feb/19/schneier/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html"&gt;Schneier on Security: Cryptanalysis of SHA-1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
If you want to understand the “breaking” of SHA-1, this is the place to go. Surprisingly accessible.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bruce-schneier"&gt;bruce-schneier&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cryptanalysis"&gt;cryptanalysis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sha"&gt;sha&lt;/a&gt;&lt;/p&gt;



</summary><category term="bruce-schneier"/><category term="cryptanalysis"/><category term="hashing"/><category term="security"/><category term="sha"/></entry><entry><title>Schneier on Security: SHA-1 Broken</title><link href="https://simonwillison.net/2005/Feb/16/schneier/#atom-tag" rel="alternate"/><published>2005-02-16T04:47:31+00:00</published><updated>2005-02-16T04:47:31+00:00</updated><id>https://simonwillison.net/2005/Feb/16/schneier/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.schneier.com/blog/archives/2005/02/sha1_broken.html"&gt;Schneier on Security: SHA-1 Broken&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Whoa.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bruce-schneier"&gt;bruce-schneier&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sha"&gt;sha&lt;/a&gt;&lt;/p&gt;



</summary><category term="bruce-schneier"/><category term="hashing"/><category term="security"/><category term="sha"/></entry><entry><title>Signing comments on blogs</title><link href="https://simonwillison.net/2003/Jul/22/signingComments/#atom-tag" rel="alternate"/><published>2003-07-22T21:10:50+00:00</published><updated>2003-07-22T21:10:50+00:00</updated><id>https://simonwillison.net/2003/Jul/22/signingComments/#atom-tag</id><summary type="html">
    &lt;p&gt;Adrian Holovaty has implemented &lt;a href="http://www.holovaty.com/blog/archive/2003/07/22/0211" title="New weblog feature: Reserved comment names"&gt;reserved comment names&lt;/a&gt; in his blog, a feature that prevents anyone apart from him from using the names "Adrian", "Adrian H." or "Adrian Holovaty" when posting a comment. François Nonnenmacher suggests &lt;a href="http://www.padawan.info/trusted_comments.html" title="Trusted comments"&gt;extending the idea&lt;/a&gt; to allow people to "confirm" their authorship of comments on any blog using a TrackBack sent to their site that in turn causes them to be sent an alert email, which they can then use to confirm their comment. I like his idea of authentication based on &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;s (email addresses are no good; they should not be publically displayed for fear of spam harvesters) but I think I've come up with an alternative authentication scheme that removes the need for the user to manually confirm authorship. This is pretty complicated, so bare with me.&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;The comment author enter's their comment in to a form on the site. They see a standard icon indicating that the blog in question supports comment signing. Rather than manually entering their name and &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;, they activate a bookmarklet that they have previously added to their browser.&lt;/li&gt;
 &lt;li&gt;The bookmarklet fills in the name and &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt; fields for them. It also takes the comment, appends a secret key (stored in the bookmarklet) and finds the MD5 hash of the new string, using the &lt;a href="http://pajhome.org.uk/crypt/md5/index.html"&gt;Javascript MD5 library&lt;/a&gt;. It inserts this hash in to a hidden field in the comment form.&lt;/li&gt;
 &lt;li&gt;The user can now submit the new comment. That's all they have to do.&lt;/li&gt;
 &lt;li&gt;The weblog server now kicks in to action. If the comment has not been signed (there is no hash in the hidden field) it adds the comment normally, noting that it should be displayed as an "unsigned" comment on the comments page. End of story.&lt;/li&gt;
 &lt;li&gt;If it &lt;em&gt;has&lt;/em&gt; been signed, the server has some work to do. First it must start loading the &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt; indicated by the user on the comment form. It is looking for a &lt;code&gt;&amp;lt;link rel="signature"&amp;gt;&lt;/code&gt; element, which will provide the &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt; of a signature authenticating web service. If the &amp;lt;/head&amp;gt; tag is reached, the system can assume the link element does not exist and can mark the comment as "unsigned",&lt;/li&gt;
 &lt;li&gt;If the web service is found, the server can now send it the comment and the User's site &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;. The web service (which knows the user's secret key) will respond with a hash created in the same way as the one constructed by the bookmarklet.&lt;/li&gt;
 &lt;li&gt;If the hash returned by the web service matches the hash provided by the bookmarklet, the comment is considered "signed". The server can store it as such, and later display it with an icon or style that indicates it is a signed comment. If they do not match, the server can either store the comment as "unsigned" or even flag it as "untrusted", since it was incorrectly signed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As you can see, it's a relatively complicated system. The comment authors must have a custom bookmarklet and add a tag to their home page indicating their authenticating web service &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;. Note that they do &lt;em&gt;not&lt;/em&gt; need to host the authentication web service themselves - they can instead point to one run by someone else who they trust (trust here is essential as the web service must know the user's private key). Meanwhile, the blogging system needs to be able to perform &lt;acronym title="HyperText Transfer Protocol"&gt;HTTP&lt;/acronym&gt; requests.&lt;/p&gt;

&lt;p&gt;The key advantage of my system is that, being based on MD5, it is relatively easy to implement (as opposed to a system based on something like &lt;acronym title="Pretty Good Privacy"&gt;PGP&lt;/acronym&gt;). Provided no one points out any immediate flaws, I would happily construct a prototype in &lt;acronym title="PHP: Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt;. I'm sure a Perl implementation for Moveable Type users would not prove much of a challenge to any talented plugin author.&lt;/p&gt;

&lt;p&gt;Security wise, it strikes me that the weakest link is the client side bookmarklet which comment authors would need to use. However, comment signing is not the most critical security application in the world and comment authors could easily change their password by updating their bookmarklet and alerting their signature web-service provider (which could even be themselves) of the change.&lt;/p&gt;

&lt;p&gt;And if the signature idea doesn't win any favour, the idea of having a bookmarklet to fill in your name and &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt; in blog comment forms is one I've been meaning to share for some time.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adrian-holovaty"&gt;adrian-holovaty&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/blogging"&gt;blogging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/trackback"&gt;trackback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/site-upgrades"&gt;site-upgrades&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="adrian-holovaty"/><category term="blogging"/><category term="hashing"/><category term="security"/><category term="trackback"/><category term="site-upgrades"/></entry><entry><title>Hashing client-side data</title><link href="https://simonwillison.net/2003/Feb/8/hashingClientsideData/#atom-tag" rel="alternate"/><published>2003-02-08T23:53:25+00:00</published><updated>2003-02-08T23:53:25+00:00</updated><id>https://simonwillison.net/2003/Feb/8/hashingClientsideData/#atom-tag</id><summary type="html">
    &lt;p&gt;Via &lt;a href="http://radio.weblogs.com/0103807/2003/02/08.html#a1323" title="PHP and OWASP Security"&gt;Scott&lt;/a&gt;, a clever &lt;acronym title="PHP: Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; technique for ensuring data sent to the browser as a cookie or hidden form variable isn't tampered with by the user:&lt;/p&gt;

&lt;blockquote cite="http://www.sklar.com/page/article/owasp-top-ten"&gt;&lt;p&gt;
If you're expecting to receive data in a cookie or a hidden form field that you've previously sent to a client, make sure it hasn't been tampered with by sending a hash of the data and a secret word along with the data. Put the hash in a hidden form field (or in the cookie) along with the data. When you receive the data and the hash, re-hash the data and make sure the new hash matches the old one.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;A further explanation and example code can be found in &lt;a href="http://www.sklar.com/page/article/owasp-top-ten"&gt;PHP and the OWASP Top Ten Security Vulnerabilities&lt;/a&gt;, a handy article describing how &lt;acronym title="PHP: Hypertext Preprocessor"&gt;PHP&lt;/acronym&gt; coders can combat the top ten web application security problems highlighted by a recent report from &lt;a href="http://www.owasp.org/"&gt;OWASP&lt;/a&gt;. Incidentally, &lt;acronym title="The Open Web Application Security Project"&gt;OWASP&lt;/acronym&gt; still haven't fixed the cross site scripting vulnerability &lt;a href="http://www.owasp.org/%3Cscript%3Ealert(%22boo%22)%3C/script%3E"&gt;on their own site&lt;/a&gt;, discovered by &lt;a href="http://tom.me.uk/blog/"&gt;Tom Gilder&lt;/a&gt; several weeks ago.&lt;/p&gt;

&lt;p&gt;Incidentally, while the hashing method is clever and should be nice and secure I personally advocate not sending the user &lt;em&gt;any&lt;/em&gt; information unless absolutely necessary - use sessions and store sensitive data on the server instead. I suppose you could always use the hash to add an extra layer of security to the session identifier though.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/hashing"&gt;hashing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/owasp"&gt;owasp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scott-johnson"&gt;scott-johnson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="hashing"/><category term="owasp"/><category term="php"/><category term="scott-johnson"/><category term="security"/></entry></feed>