본문 바로가기
Programming

C# DES 암호화(Encrypt), 복호화(Decrypt)

by Mizix 2010. 8. 18.
반응형

ex>>
// 암호화 키(8byte)
static byte[] desKey = ASCIIEncoding.ASCII.GetBytes("tech0001");
Des des = new Des(desKey);
.......

Des Class(암호화, 복호화)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Cryptography;
using System.IO;


/// <summary>
/// Summary description for Des
/// </summary>
public class Des
{
    byte[] key = null;
protected Des()
{
}

    public Des(byte[] desKey)
    {
        this.key = desKey;
    }

    public string Encrypt(string plain_text)
    {
        if (string.IsNullOrEmpty(plain_text))
        {
            throw new ArgumentException("The string which needs to be encrypted can not be null.");
        }
        if (key.Length != 8)
        {
            throw (new Exception("Invalid key. Key length must be 8 byte."));
        }

        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
        MemoryStream memoryStream = new MemoryStream();
        CryptoStream cryptoStream = new CryptoStream(memoryStream,
            cryptoProvider.CreateEncryptor(key, key), CryptoStreamMode.Write);
        StreamWriter writer = new StreamWriter(cryptoStream);
        writer.Write(plain_text);
        writer.Flush();
        cryptoStream.FlushFinalBlock();
        writer.Flush();
        string cypher_text = Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
        return cypher_text;
    }

    public string Decrypt(string cypher_text)
    {
        if (String.IsNullOrEmpty(cypher_text))
        {
            throw new ArgumentNullException
               ("The string which needs to be decrypted can not be null.");
        }
        if (key.Length != 8)
        {
            throw (new Exception("Invalid key. Key length must be 8 byte."));
        }
        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
        MemoryStream memoryStream = new MemoryStream
                (Convert.FromBase64String(cypher_text));
        CryptoStream cryptoStream = new CryptoStream(memoryStream,
            cryptoProvider.CreateDecryptor(key, key), CryptoStreamMode.Read);
        StreamReader reader = new StreamReader(cryptoStream);
        string plain_text = reader.ReadToEnd();
        return plain_text;
    }
}
반응형

'Programming' 카테고리의 다른 글

auto_increment 없이 시퀀스만들기(자동 값 증가, 감소하기)  (0) 2010.09.08
Sqlite DB + java 연동  (0) 2010.08.24
각종 DB JDBC 연결  (0) 2010.08.17
인덱서  (0) 2010.08.06