'내가 아는거/C#'에 해당되는 글 2건

  1. 2013.12.06 C# 에서 List 또는 배열의 요소 비교.
  2. 2012.11.26 C#으로 구현한 DES 문자열 암호화! 2
내가 아는거/C#2013. 12. 6. 11:17


작업 중 두 List가 같은지 틀린지를 비교해야 할 상황이 발생했다.


이런 경우 


List<string> a = new List<string>();
a.Add("a");
a.Add("b");
a.Add("c");
a.Add("d");

List<string> b = new List<string>();
b.Add("a");
b.Add("b");
b.Add("c");
b.Add("d");
bool same=a.SequenceEqual(b);

이렇게 하면 되는데

내 상황은 {"A", "B", "C"}와 {"C", "A", "B"} 가 같다고 나와야 하는 상황.


아씨... 루프 쫌 돌아줘야겠다... 하던 중 팀장님의 조언으로 쉽게 해결!


List<string> a = new List<string>();
a.Add("d");
a.Add("a");
a.Add("c");
a.Add("b");

List<string> b = new List<string>();
b.Add("a");
b.Add("b");
b.Add("c");
b.Add("d");

a.Sort();
b.Sort();

bool same=a.SequenceEqual(b);


이러~케!



Posted by zinzza
내가 아는거/C#2012. 11. 26. 23:51
문자열 암호화는 여기저기서 자주 사용하게된다.
함수로 만들어봤다 ㅎㅎㅎ
에러처리등이 없긴 하지만 급한대로 가져다 쓸 수 있을 듯?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

//요거 걸어줘야한다.  
using System.Security.Cryptography;

namespace LC2Crypt
{
    class Program
    {
        static void Main(string[] args)
        {
            string OriStr = "Hello World";
            string EncStr = Encrypt(OriStr);
            string DecStr = Decrypt(EncStr);

            Console.WriteLine("원본 데이터==========================");
            Console.WriteLine(OriStr);

            Console.WriteLine("암호화 데이터=========================");
            Console.WriteLine(EncStr);

            Console.WriteLine("복호화 데이터=========================");
            Console.WriteLine(DecStr);
        }

        //암호화 키.  8글자로 이루어짐.
        static byte[] Skey = ASCIIEncoding.ASCII.GetBytes("11111111");

        static string Encrypt(string p_data)
        {
            // 암호화 알고리즘중 RC2 암호화를 하려면 RC를
            // DES알고리즘을 사용하려면 DESCryptoServiceProvider 객체를 선언한다.
            //RC2 rc2 = new RC2CryptoServiceProvider();
            DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();

            // 대칭키 배치
            rc2.Key = Skey;
            rc2.IV = Skey;

            // 암호화는 스트림(바이트 배열)을
            // 대칭키에 의존하여 암호화 하기때문에 먼저 메모리 스트림을 생성한다.
            MemoryStream ms = new MemoryStream();

            //만들어진 메모리 스트림을 이용해서 암호화 스트림 생성 
            CryptoStream cryStream =
                              new CryptoStream(ms, rc2.CreateEncryptor(), CryptoStreamMode.Write);

            // 데이터를 바이트 배열로 변경
            byte[] data = Encoding.UTF8.GetBytes(p_data.ToCharArray());

            // 암호화 스트림에 데이터 씀
            cryStream.Write(data, 0, data.Length);
            cryStream.FlushFinalBlock();

            // 암호화 완료 (string으로 컨버팅해서 반환)
            return Convert.ToBase64String(ms.ToArray());
        }

        static string Decrypt(string p_data)
        {
            
            // 암호화 알고리즘중 RC2 암호화를 하려면 RC를
            // DES알고리즘을 사용하려면 DESCryptoServiceProvider 객체를 선언한다.
            //RC2 rc2 = new RC2CryptoServiceProvider();
            DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();

            // 대칭키 배치
            rc2.Key = Skey;
            rc2.IV = Skey;

            // 암호화는 스트림(바이트 배열)을
            // 대칭키에 의존하여 암호화 하기때문에 먼저 메모리 스트림을 생성한다.
            MemoryStream ms = new MemoryStream();
            
            //만들어진 메모리 스트림을 이용해서 암호화 스트림 생성 
            CryptoStream cryStream = 
                              new CryptoStream(ms, rc2.CreateDecryptor(), CryptoStreamMode.Write);

            //데이터를 바이트배열로 변경한다.
            byte[] data = Convert.FromBase64String(p_data);

            //변경된 바이트배열을 암호화 한다.
            cryStream.Write(data, 0, data.Length);
            cryStream.FlushFinalBlock();

            //암호화 한 데이터를 스트링으로 변환해서 리턴
            return Encoding.UTF8.GetString(ms.GetBuffer());
        }
    }
}


Posted by zinzza