Solved

How to encrypt/decrypt a string

Posted on 2008-09-30
6
1,219 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
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

840 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