<?xml version="1.0" encoding="us-ascii"?>
<rss version="2.0">
  <channel>
    <title>blogs.matrixwebs.com</title>
    <description>blogs.matrixwebs.com</description>
    <link>http://blogs.matrixwebs.com/members/feed.aspx?username=Geetha</link>
    <docs>http://backend.userland.com/rss</docs>
    <generator>RSS.NET: http://www.rssdotnet.com/</generator>
    <item>
      <title>How do we protect passwords in web pages</title>
      <description>&lt;p&gt;While developing web pages, we need to avoid storing user passwords either in plaintext or encrypted format. Instead, store password hashes with salt. Ensure only required accounts have the access to user store database. Store your credential database on a physically separate server from your Web server.&lt;/p&gt;
&lt;p&gt;Solution:&lt;/p&gt;
&lt;p&gt;Passwords should not be stored encrypted, but rather they should be stored HASHED or DIGESTED.&amp;nbsp;To validate a username/password add some magic &amp;quot;salt&amp;quot; and hash it.&amp;nbsp;This results in a fixed length string of some bytes of data.&amp;nbsp;We compare that to the stored hash and if they match &amp;ndash; user is validated.&lt;/p&gt;
&lt;p&gt;For examples:&lt;/p&gt;
&lt;p&gt;Using C#/VB.NET:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.obviex.com/samples/hash.aspx" target="_blank" rel="nofollow"&gt;&lt;u&gt;&lt;font color="#003399"&gt;http://www.obviex.com/samples/hash.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using ORACLE:&lt;/p&gt;
&lt;p&gt;declare&lt;/p&gt;
&lt;p&gt;function digest( p_username in varchar2, p_password in varchar2 ) return varchar2&lt;/p&gt;
&lt;p&gt;is&lt;/p&gt;
&lt;p&gt;begin&lt;/p&gt;
&lt;p&gt;return ltrim( to_char( dbms_utility.get_hash_value(&lt;/p&gt;
&lt;p&gt;upper(p_username)||'/'||upper(p_password), 1000000000, power(2,30) ),rpad( 'X',29,'X')||'X' ) );&lt;/p&gt;
&lt;p&gt;end digest;&lt;/p&gt;
&lt;p&gt;begin&lt;/p&gt;
&lt;p&gt;for x in ( select username from all_users where rownum &amp;lt; 20 )&lt;/p&gt;
&lt;p&gt;loop&lt;/p&gt;
&lt;p&gt;dbms_output.put_line( 'User: ' || rpad( x.username , 30 ) ||&lt;/p&gt;
&lt;p&gt;' digest: ' || digest( x.username, 'TIGER' ) );&lt;/p&gt;
&lt;p&gt;end loop;&lt;/p&gt;
&lt;p&gt;end;&lt;/p&gt;
&lt;p&gt;/&lt;/p&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;p&gt;User: SYS&amp;nbsp;&amp;nbsp;digest: 6869FA1A&lt;/p&gt;
&lt;p&gt;User: SYSTEM&amp;nbsp;digest: 79F08AFC&lt;/p&gt;
&lt;p&gt;User: SCOTT&amp;nbsp;digest: 4307767C&lt;/p&gt;
&lt;!-- END MAIN APPLICATION CONTENT --&gt;</description>
      <link>http://blogs.matrixwebs.com/members/Geetha/archive/2007/6/29/1082.aspx</link>
      <comments>http://blogs.matrixwebs.com/members/Geetha/archive/2007/6/29/1082.aspx#comment</comments>
      <guid isPermaLink="True">http://blogs.matrixwebs.com/members/Geetha/archive/2007/6/29/1082.aspx</guid>
      <pubDate>Fri, 29 Jun 2007 21:18:37 GMT</pubDate>
    </item>
  </channel>
</rss>