Programming/암호학

[암호화] C#으로 구현된 DES 알고리즘사용

Foolishdevil 2010. 5. 17. 15:22
펌: http://www.codeproject.com/KB/cs/NET_Encrypt_Decrypt.aspx
C#으로 구현된 DES 알고리즘에 대해서 찾다가..
Code project에 구현되어있는 내용을 가져왔다.
Console.ReadLine()을 통해서 암호화할 문자를 가져와 Encrypt에서 암호화를 하고 Decrypt에서 복호화를 진행한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace EncryptAndDecrypt
{
    class Program
    {
        static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("ZeroCool");
        static void Main(string[] args)
        {
            try
            {
                while (true)
                {
                    Console.WriteLine("Original String: ");
                    string originalString = Console.ReadLine();
                    string cryptedString = Encrypt(originalString);
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("\nEncrypt Result: {0}", cryptedString);
                    Console.WriteLine("Decrypt Result: {0}", Decrypt(cryptedString));
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("From: {0}.\nDetail: {1}", ex.Source, ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }

        }

        public static string Encrypt(string originalString)
        {
            if (String.IsNullOrEmpty(originalString))
            {
                throw new ArgumentNullException("The string which needs to be encrypted can not be null.");
            }
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
            StreamWriter writer = new StreamWriter(cryptoStream);
            writer.Write(originalString);
            writer.Flush();
            cryptoStream.FlushFinalBlock();
            writer.Flush();
            return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
        }

        public static string Decrypt(string cryptedString)
        {
            if (String.IsNullOrEmpty(cryptedString))
            {
                throw new ArgumentNullException("The string which needs to be decrypted can not be null.");
            }
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(cryptedString));
            CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
            StreamReader reader = new StreamReader(cryptoStream);
            return reader.ReadToEnd();
        }
    }
}