asp.netPRO Download a Free Evaluation Today!



Subscription Services
Print Subscription
Online-Only Subscription
Renew Subscription
asp.netNOW Newsletter
Change of Address
Pay An Invoice
Subscription Packages

asp.netPRO
Articles
411asp.net Directory
New Products
Book Reviews
Blog Listings  
E-Newsletter Articles- NEW
Events  - NEW 
Job Listings  
Product Reviews
Opinion
Back Issues
Reprints/E-prints
Search

Downloads
Premium Downloads


Informant
Contact Us
Advertise with Us
Write For Us



 
 
 


Fully Loaded Windows Servers


.NET Pro VPS 2008 Fall Conference in Las Vegas
2007 asp.netPRO Complete Works CD
Co-Sponsored by:
Download your free trial now!


Click here for the online product directory, asp.netPRO Product Portal

 

Latest Features

 •

Conflict Resolution


 •

Cause and Effect


 •

Why Are You Still Single?


 •

Future Features of ASP.NET


 •

WCF Proxies: To Cache or Not to Cache?



Article Rating



Tell a friend
about this article!




Troubleshooting Tips

LANGUAGES: VB .NET

ASP.NET VERSIONS: 1.0 | 1.1

 

Encryption Made (Sort of) Easy

Encrypt your .NET data in a few simple steps.

 

 

Microsoft designed the .NET Framework with careful thought to security, making it one of the most secure development environments ever. That certainly isn't meant to say that it is secure; there are far too many flaws found in almost any widely deployed software product to claim complete security. But .NET meets many of the needs of secure applications and the .NET Framework provides a host of security services.

 

Encryption is one of the strongest security features in the .NET Framework, with rich support for widely used encryption and hashing algorithms. It is highly extensible so that you can take advantage of new algorithms and new implementations of new algorithms easily through configuration files. Many features are built on top of the Windows Crypto API, while many others are available only in .NET. Its features are designed to allow the protection of transient data only while it is moving across the network, as well as secure, long-term storage of sensitive data.

 

Encrypting data in .NET requires a few simple steps, assuming that you understand enough about which algorithms to use and how to use them securely:

 

'Get the plaintext and put it into a memory stream

Dim mStream As MemoryStream = New MemoryStream

Dim binMemWriter As BinaryWriter = New BinaryWriter(mStream)

binMemWriter.Write(txtPlaintext.Text)

mStream.Position = 0

 

'Define the algorithm: here, use TripleDES, using the default implementation

Dim algorithm As TripleDES = TripleDES.Create

 

'Create a CryptoStream to wrap the plain text data stream

Dim cStream As CryptoStream = _

 New CryptoStream(mStream, algorithm.CreateEncryptor(algorithm.Key, algorithm.IV), _

 CryptoStreamMode.Read)

 

'Read the plain text, encrypting the data

Dim cipher(mStream.Capacity - 1) As Byte

cStream.Read(cipher, 0, mStream.Capacity)

Dim str(mStream.Capacity - 1) As Char

 

For i As Int32 = 0 To mStream.Capacity - 1

     str(i) = Chr(cipher(i))

Next

 

Once this code executes, the str variable contains the encrypted cipher text. There are many ways to encrypt plaintext in .NET, of which the code above is one example. The steps are identical in C#.

 

Decrypting the cipher text is basically the same thing but in reverse:

 

'Define the algorithm

Dim algorithm As TripleDESCryptoServiceProvider = _

  New TripleDESCryptoServiceProvider

 

'Read the crypto data, including key length, key, and initialization vector

'from some secure storage location

...

 

'Create a CryptoStream to decrypt the data

Dim mStream As MemoryStream = New MemoryStream

Dim cStream As CryptoStream = _

 New CryptoStream(mStream, algorithm.CreateDecryptor(key, iv), _

 CryptoStreamMode.Write)

 

'Get the plaintext

cStream.Write(encryptData, 0, iCipherLength)

mStream.Position = 0

Dim binMemReader As BinaryReader = New BinaryReader(mStream)

 

txtPlaintext.Text = binMemReader.ReadString

 

Simple, right? Unfortunately, the really hard part is embodied in the comment in the decryption code about reading the key from "some secure storage location." Key management is very difficult in any application of encryption. If you use symmetric encryption you have a shared secret that one party needs to transmit securely to another party so that they can alternately encrypt and decrypt data. If you use asymmetric encryption - such as with public and private key pairs - you still have to store your private key securely. These are not easy things to do securely. Doing it wrong can open huge security holes in custom applications, and particularly in Web applications.

 

That's why one of the most useful encryption technologies isn't a part of .NET at all. Instead, it is part of all desktop and server versions of Windows since Windows 2000. It is called the Data Protection API (DPAPI) and acts as a vehicle for encrypting data as well as using the deepest, most secure bowels of Windows to protect your data. It can greatly simplify the code you need to write while taking care of securely storing encryption keys. Used correctly, it can even protect data from rogue applications running under the same login used to encrypt the data in the first place.

 

In the next few installments of this column, I'll cover in more detail what DPAPI can and can't do for you and explore some of the ways you can get around its limitations when used with ASP.NET applications.

 

Don Kiely is senior technology consultant for Information Insights, a business and technology consultancy in Fairbanks, Alaska. E-mail him at mailto:donkiely@computer.org.

 

 

 

 

Microsoft Internet Explorer
Top of page

 

Download a Free Evaluation Today!

Informant Communications Group

Informant Communications Group, Inc.
5105 Florin Perkins Road
Sacramento, CA 95826
Phone: (916) 379-0609 • Fax: (916) 379-0610

Copyright © 2008 Informant Communications Group. All Rights Reserved. • Site Use Agreement • Send feedback to the Webmaster • Important information about privacy