• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1271
  • Last Modified:

How to encrypt/decrypt a string

I need to encrypt a string to store in a database (credit card number).  How can I do this with c#?
0
centdevs
Asked:
centdevs
  • 3
  • 3
1 Solution
 
johnaryanCommented:
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
 
centdevsAuthor Commented:
Do I have to store a key for this somewhere?
0
 
johnaryanCommented:
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
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
centdevsAuthor Commented:
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
 
johnaryanCommented:
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
 
centdevsAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now