<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Cryptography</title>
        <link>http://geekswithblogs.net/rashid/category/6051.aspx</link>
        <description>Cryptography</description>
        <language>en-US</language>
        <copyright>Kazi Manzur Rashid</copyright>
        <managingEditor>kazimanzurrashid@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Secure Cookie</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx</link>
            <description>&lt;p&gt;This my second post of almost same topic asp.net lacking. This time it is Cookie. Still Asp.net has the lacking of creating encrypted cookie. Here is another handy class which generates encrypted cookie.&lt;/p&gt; &lt;p&gt;Usage:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Writing Cookie&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Set(Response, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"Value1"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now.AddDays(1));&lt;br /&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Set(Response, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"Value1"&lt;/span&gt;); &lt;span style="color: rgb(0,128,0)"&gt;//Overloaded &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Reading Cookie&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key1Value = &lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;/span&gt;.Get(Request, &lt;span style="color: rgb(163,21,21)"&gt;"Key1"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;SecureCookie: &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Web.UI;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;sealed&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecureCookie&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0,128,0)"&gt;//Rijndael Key size is 256 bit or 32 byte, Can also be mentioned in web.config instead of hardcoding&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;readonly&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Key = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] {45, 236, 171, 7, 85, 6, 41, 34, 216, 14, 78, 156, 78, 3, 103, 154, 9, 150, 65, 54, 226, 95, 68, 79, 159, 36, 246, 57, 177, 107, 116, 8};&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Set(&lt;span style="color: rgb(43,145,175)"&gt;HttpResponse&lt;/span&gt; response,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value,&lt;br /&gt;    &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt; expire)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt; cookie = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(key)), &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(value)));&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((expire != &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MinValue) &amp;amp;&amp;amp; (expire != &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MaxValue))&lt;br /&gt;        {&lt;br /&gt;            cookie.Expires = expire;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        response.Cookies.Set(cookie);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Set(&lt;span style="color: rgb(43,145,175)"&gt;HttpResponse&lt;/span&gt; response,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value)&lt;br /&gt;    {&lt;br /&gt;        Set(response, key, value, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.MaxValue);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Get(&lt;span style="color: rgb(43,145,175)"&gt;HttpRequest&lt;/span&gt; request, &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; key)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;HttpCookie&lt;/span&gt; cookie = request.Cookies[&lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlEncode(Encrypt(key))];&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (cookie == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((cookie.Value == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (cookie.Value.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; value = &lt;span style="color: rgb(43,145,175)"&gt;HttpUtility&lt;/span&gt;.UrlDecode(cookie.Value);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; Decrypt(value);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Encrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; plain)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((plain == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (plain.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.ToBase64String(Read(crypto.CreateEncryptor(), &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(plain)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; Decrypt(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; cipher)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; ((cipher == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;) || (cipher.Length == 0))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = CreateCrypto())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Encoding&lt;/span&gt;.ASCII.GetString(Read(crypto.CreateDecryptor(), System.&lt;span style="color: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.FromBase64String(cipher)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; CreateCrypto()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,128,0)"&gt;//Using Rijndael as it is much more secure among the others&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: rgb(43,145,175)"&gt;SymmetricAlgorithm&lt;/span&gt; crypto = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;RijndaelManaged&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;        crypto.Key = Key;&lt;br /&gt;        crypto.IV = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[crypto.IV.Length];&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; crypto;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [&lt;span style="color: rgb(43,145,175)"&gt;DebuggerStepThrough&lt;/span&gt;()]&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] Read(&lt;span style="color: rgb(43,145,175)"&gt;ICryptoTransform&lt;/span&gt; transformer,&lt;br /&gt;    &lt;span style="color: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] data)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt; ms = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;MemoryStream&lt;/span&gt;())&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt; cs = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CryptoStream&lt;/span&gt;(ms, transformer, &lt;span style="color: rgb(43,145,175)"&gt;CryptoStreamMode&lt;/span&gt;.Write))&lt;br /&gt;            {&lt;br /&gt;                cs.Write(data, 0, data.Length);&lt;br /&gt;                cs.FlushFinalBlock();&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;  ms.ToArray();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103910"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103910" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103910.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx</guid>
            <pubDate>Thu, 18 Jan 2007 17:20:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103910.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/18/103910.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103910.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103910.aspx</trackback:ping>
        </item>
        <item>
            <title>My First Article</title>
            <link>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</link>
            <description>&lt;p&gt;Recently I wrote an article &lt;a href="http://www.codeproject.com/useritems/SecureDataExchange.asp" target="_blank"&gt;"How to exchange data securely with a WebService without HTTPS/SSL"&lt;/a&gt; in &lt;a href="http://www.codeproject.com" target="_blank"&gt;codeproject&lt;/a&gt;. If Cryptography, Public/Private Key, Digital Signature and Web Service are one of your interest, I strongly recommend to read it.&lt;/p&gt; &lt;p&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://www.codeproject.com/useritems/SecureDataExchange.asp"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.codeproject.com/useritems/SecureDataExchange.asp" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103526" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rashid/aggbug/103526.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kazi Manzur Rashid</dc:creator>
            <guid>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx</guid>
            <pubDate>Sat, 13 Jan 2007 18:14:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rashid/comments/103526.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rashid/archive/2007/01/14/103526.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rashid/comments/commentRss/103526.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rashid/services/trackbacks/103526.aspx</trackback:ping>
        </item>
    </channel>
</rss>