Solved

How to encrypt/decrypt a string

Posted on 2008-09-30
6
1,196 Views
Last Modified: 2009-08-19
I need to encrypt a string to store in a database (credit card number).  How can I do this with c#?
0
Comment
Question by:centdevs
  • 3
  • 3
6 Comments
 
LVL 5

Expert Comment

by:johnaryan
ID: 22605500
Try this:
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();

            MemoryStream ms = new MemoryStream(Convert.FromBase64String(sSource));

            CryptoStream cs = new CryptoStream(ms, rijn.CreateDecryptor(),

            CryptoStreamMode.Read);
 

            for (int i = 0; i < ms.Length; i++)

            {

                // the next line with throw a CryptographicException with the

                // message: "Padding is invalid and can not be removed."

                cs.ReadByte();

            }

        }

Open in new window

0
 

Author Comment

by:centdevs
ID: 22605536
Do I have to store a key for this somewhere?
0
 
LVL 5

Expert Comment

by:johnaryan
ID: 22605676
It uses the MachineKey as far as i know, but this can be changed.
You can do a search on CryptoStream to find out the specifics.
Here's the MSDN reference: http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:centdevs
ID: 22605872
This is pretty new to me, how do I get the encrypted string back out, cs.ToString() ?  Like if I want to create an encrypt method and a decrypt method, each that returns either an encrypted string or a decrypted string.
0
 
LVL 5

Accepted Solution

by:
johnaryan earned 500 total points
ID: 22606026
This is another snippet from MSDN and should do what you need.
using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Text;

using System.Security.Cryptography;

using System.IO;
 

namespace QueryStringEncryption

{

    public class Cryptography

    {

        #region Fields
 

        private static byte[] key = { };

        private static byte[] IV = { 38, 55, 206, 48, 28, 64, 20, 16 };

        private static string stringKey = "!5663a#KN";
 

        #endregion
 

        #region Public Methods
 

        public static string Encrypt(string text)

        {

            try

            {

                key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));

                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                Byte[] byteArray = Encoding.UTF8.GetBytes(text);

                MemoryStream memoryStream = new MemoryStream();

                CryptoStream cryptoStream = new CryptoStream(memoryStream,

                    des.CreateEncryptor(key, IV), CryptoStreamMode.Write);

                cryptoStream.Write(byteArray, 0, byteArray.Length);

                cryptoStream.FlushFinalBlock();

                return Convert.ToBase64String(memoryStream.ToArray());

            }

            catch (Exception ex)

            {

                // Handle Exception Here

            }

            return string.Empty;

        }
 
 
 

        public static string Decrypt(string text)

        {

            try

            {

                key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));

                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                Byte[] byteArray = Convert.FromBase64String(text);

                MemoryStream memoryStream = new MemoryStream();

                CryptoStream cryptoStream = new CryptoStream(memoryStream,

                    des.CreateDecryptor(key, IV), CryptoStreamMode.Write);

                cryptoStream.Write(byteArray, 0, byteArray.Length);

                cryptoStream.FlushFinalBlock();

                return Encoding.UTF8.GetString(memoryStream.ToArray());

            }

            catch (Exception ex)

            {

                // Handle Exception Here

            }

            return string.Empty;

        }
 
 
 

        #endregion
 

    }
 

}

Open in new window

0
 

Author Comment

by:centdevs
ID: 22607346
How can I test this?  I'm trying to send the encrypt method a string, and then send the result to the decrypt method, but it catches an exception "Bad Data"
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now