728x90
300x250

[ASP.NET 4] RouteMap 기술 - URL 단축하기 + 매개변수 처리

ASP.NET Framework 4에 와서 Routing 기술은 더욱 강화되었습니다.
IIS 서버 기술 Rewrite에서 벗어나 완전한 Routing 기술을 제공합니다. URL Routing Process는 다음과 같이 동작합니다.



Figure 1) URL Routing Processing


1. 왜 URL Routing을 도입해야 하는가?

첫째로는, 사용자가 기억하기 좋은 어휘로 전환할 수 있습니다.
둘째로는, 주소가 간결해집니다.
셋째로는, 웹 사이트 구조가 가상화됩니다.
(즉, 물리 주소의 노출이 줄어듭니다.)
넷째로는, 해킹 가능한 상태에서 벗어나게 해줍니다.


2. ASP.NET 4.0에서의 URL Routing


ASP.NET 4.0은 우리에게 메커니즘을 라우팅 전체 URL을 처리하는 단순하고 강력한 방법을 제공합니다.
앞에서 설명한 대로, 라우팅 URL을 제공하기 위해 ASP.NET은 이제 수많은 클래스를 갖춘 방법 중 여러 쉽게 물리적 파일과 URL을 단순하게 사용할 수 있도록 기능을 제공합니다. 우리는 Framework 4의 라이브러리를 사용하여 적용할 수 있습니다.



Figure 2-1) ASP.NET 4.0 URL Routing 흐름

이쯤에서 알아야 할 구현에 대한 구조는 정리하겠습니다.
서버 관리자와 프로그래머가 동시에 알아야 하는 ASP.NET의 구현구조에 대해서는 제외하였습니다.


3. 구현

 번호 파일명 매개변수  URL Routing 주소 
 1 index.aspx Bookstore
 2 index.aspx name Bookstore/name
 3 index.aspx name, age  Bookstore/name/age

[솔루션 파일 구성]
index.aspx
web.config
Global.asax

Global.asax 코드


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
namespace WebApplication1
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.MapPageRoute("StoreRoute1", "BookStore", "~/index.aspx", false);
            RouteTable.Routes.MapPageRoute("StoreRoute2", "BookStore/{name}", "~/index.aspx", false);
            RouteTable.Routes.MapPageRoute("StoreRoute3", "BookStore/{name}/{age}", "~/index.aspx", false);
        }
        protected void Session_Start(object sender, EventArgs e)
        {
        }
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
        }
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
        }
        protected void Application_Error(object sender, EventArgs e)
        {
        }
        protected void Session_End(object sender, EventArgs e)
        {
        }
        protected void Application_End(object sender, EventArgs e)
        {
        }
    }
}

참고)

'RouteTable.Routes.MapPageRoute("StoreRoute2", "BookStore/{name}", "~/index.aspx", false);'만 가지고 출력한다고 가정했을 때, http://localhost:포트번호/BookStore/{name}으로 접속할 수 있습니다.
단, 하위 주소인 http://localhost:포트번호/BookStore로 접속할 수 없습니다.

이 예제에서는 그러한 것을 보완한 예제를 설명하였습니다.

index.aspx 코드


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="WebApplication1.index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="sample1" Text="Null" runat="server"></asp:Label><br />
        <asp:Label ID="sample2" Text="Null" runat="server"></asp:Label>
        <br />
        <asp:HyperLink ID="text" runat="server" NavigateUrl="~/Bookstore/Cakeon/aaa" Text="야호"></asp:HyperLink>
    </div>
    </form>
</body>
</html>



index.aspx.cs 코드


protected void Page_Load(object sender, EventArgs e)
{
            string name = Page.RouteData.Values["Name"] as string;
sample1.Text = name;
string age = Page.RouteData.Values["Age"] as string;
sample2.Text = age;
}




4. 동작 화면




5. 참고자료(Reference)

1. http://www.codeproject.com/KB/aspnet/asp_net4_0_URLRouting.aspx, 접속일자 2011-01-28

반응형
728x90
300x250

[ASP.NET] 내장 암호화(HashPasswordForStoringInConfigFile) 기법 사용하기 - 복호화(X)

내장 암호화 전 게시물에 이어 이번에는 복호화(Decrypt)가 불가능한 기법에 대해 소개하겠습니다.
라이브러리의 물리 경로는 System.Web.Security.FormsAuthenication.HashPasswordForStoringInConfigFile에 있습니다.
이 라이브러리의 형식은 다음과 같습니다.

public static string HashPasswordForStoringInConfigFile(string password, string passwordFormat)



1. string password 세부항목

string password는 부호화시킬 대상의 암호를 문자열로 입력하면 됩니다.
string passwordFormat은 System.Web.Configuration.FormsAuthPasswordFormat 열거형 값 중 하나를 나타내는 String입니다.

참고1) System.Web.Configuration.FormsAuthPasswordFormat 열거형 값

string password는 부호화시킬 대상의 암호를 문자열로 입력하면 됩니다.
string passwordFormat은 System.Web.Configuration.FormsAuthPasswordFormat 열거형 값 중 하나를 나타내는 String입니다.


2. string passwordFormat 세부항목

 
                           표2-1. System.Web.Configuration.FormsAuthPasswordFormat 열거형 값

 번호

 종류

 비고 

 1

 Clear

 암호화 시키지 않습니다.

 2

 MD5

 암호화

 3

 SHA1

 암호화


3. MD5와 SHA1(읽어보기)


                                     표2-2. MD5와 SHA1의 특징 및 문제점 그리고 현재는?


MD5(Message-Digest algorithm 5)
는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용됩니다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했습니다.

1996년에 MD5의 설계상 결함이 발견되었습니다. 이것은 매우 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했습니다. 2004년에는 더욱 심한 암호화 결함[1]이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표[2]되기도 하였습니다. 현재 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있습니다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되기도 했습니다.

 


SHA(Secure Hash Algorithm, 안전한 해쉬 알고리즘) 함수들은 서로 관련된 암호학적 해쉬 함수들의 모음입니다. 이들 함수는 미국 국가 안전 보장국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었습니다. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불립니다. 2년 후 SHA-0의 변형인 SHA-1이 발표되었으며, 그 후에 4종류의 변형, 즉 SHA-224, SHA-256, SHA-384, SHA-512가 더 발표되었습니다. 이들을 통칭해서 SHA-2라고 하기도 합니다.

SHA-1은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 합니다. 혹자는 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장합니다.

SHA-0과 SHA-1에 대한 공격은 이미 발견되었습니다. SHA-2에 대한 공격은 아직 발견되지 않았으나, 전문가들은 SHA-2 함수들이 SHA-1과 비슷한 방법을 사용하기 때문에 공격이 발견될 가능성이 있다고 지적합니다. 이들은 이제 새로운 해쉬 함수 표준을 위해 후보 함수들을 개발하고 있습니다.

 


4. 출력물

이 결과를 토대로 볼 때 그래도 MD-5보다는 SHA1이 낫다는 것을 확인할 수 있습니다.
라이브러리를 사용하면 구현하기 쉽습니다. 물론 라이브러리를 직접 구현한다면 매우 복잡하고 어렵습니다.
이번 실습에서는 아래와 같은 화면을 구현하여 암호 알고리즘을 적용하는 방법을 설명하겠습니다.



1. 새 프로젝트 만들기



ASP 빈 프로젝트를 만듭니다.

2. 빈 항목 추가하기(ASPX)



적당히 설정 후 추가 버튼을 누릅니다.

3. Label 만들기



도구 모음에서 Label을 하나 선택하여 만듭니다.

3. 코딩

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            string sField = "1";
            Label1.Text = FormsAuthentication.HashPasswordForStoringInConfigFile(sField, "SHA1");

        }
    }
}



5. 참고자료(Reference)

1. http://ko.wikipedia.org/wiki/MD5, Accessed by 2011-01-23
2. http://ko.wikipedia.org/wiki/SHA, Accessed by 2011-01-23

반응형
728x90
300x250

[ASP.NET] 내장 암호화(FormsAuthenticationTicket) 기법 사용하기 - 복/부호화 (O)

.NET Framework에 탑재된 System.Web.Security의 라이브러리를 사용하여 암호화하는 방법을 소개하겠습니다. 이번에 소개할 암호화 기법은 폼 인증에 이용되는 FormsAuthenticationTicket을 이용하는 방법에 대해서 설명하겠습니다.
이 암호화 기법의 특징은 대략 암호화가 이루어지면 길이가 300~400문자 이내로 구성됩니다. 쿠키에 적용하여 사용하면 많은 도움을 얻게 될 것입니다.

이번 실습 강좌에서는 아래에 출력된 화면과 같이 복호화와 부호화 처리를 구현하는 방법을 소개하겠습니다.


1. ASP.NET으로 암호화 구현하기(FormsAuthenticationTicket)

 

그림 1-1. 완성된 프로그램

1-1. ASP.NET 빈 프로젝트 만들기



새 프로젝트 만들기에서 ASP.NET 빈 웹 응용프로그램 만들기를 선택한 후에 적절한 설정을 맞추고 확인을 클릭합니다.

1-2. 빈 항목 추가하기(ASPX 페이지)



aspx 페이지를 적당히 설정 후에 추가를 누릅니다.

1-3. 도구 상자에서 Label 만들기



파란색으로 점 찍어놓은 Label 버튼을 클릭하여 디자인 창에 2개를 만들어줍니다.
그렇게 되면 Label1, Label2가 생성된 것을 보실 수 있습니다.

1-4. 코딩하기



디자인 창에서 빈 바탕에 더블클릭 하시면 Page_Load라는 Void 형식의 객체가 만들어집니다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          string sField = "1";
        Label1.Text = FormsAuthentication.Encrypt(new FormsAuthenticationTicket(sField, true, 1));

        FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(Label1.Text);

        Label2.Text = Ticket.Name;

        }
    }
}

반응형
728x90
300x250

[C#.NET] openFileDialog를 이용한 파일 첨부 기반 예제

이번 예제는 openFileDialog를 활용하여 파일 첨부 기반을 만드는 방법을 소개하도록 하겠습니다.
이 강좌는 파일 처리 기능은 구현하지 않았습니다. 이유는 openFileDialog를 활용하는 것이 핵심 키워드이기 때문입니다.
이 점을 인지하고 읽어주시기 바랍니다.
한 가지 더 말씀드리자면, openFileDialog를 활용하는 예제이기에 파일 제약 조건에 관하여 언급하였습니다.


1. 폼 인터페이스 디자인



TextBox, Button, openFileDialog를 적절히 배치해주시기 바랍니다.

 

 


2. 소스 코드

Button을 더블 클릭하시어 소스코드를 불러오시고 입력하시기 바랍니다.


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = "jpg";
            openFile.Filter = "Images Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
            openFile.ShowDialog();
            if (openFile.FileNames.Length > 0)
            {
                foreach (string filename in openFile.FileNames)
                {
                    this.textBox1.Text = filename;
                }
            }
        }


openFile.DefaultExt = "기본확장자";
openFile.Filter = "항목이름정의1|확장자1;확장자2;  … 확장자n;|   … 항목이름정의n|확장자1;확장자2;  … 확장자n;";
openFile.ShowDialog();  -> 파일 열기 창 호출



3. 동작 과정




첨부(Attachment)
101222_c#_Example.zip

 

반응형
728x90
300x250
[C#.NET] Base64

Base64는?

컴퓨터 분야에서 쓰이는 Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.

원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다. 즉, 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다.

그런 까닭에 이 인코딩은 전자 메일을 통한 이진 데이터 전송 등에 많이 쓰이고 있다. Base 64에는 어떤 문자와 기호를 쓰느냐에 따라 여러 변종이 있지만, 잘 알려진 것은 모두 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.


출처 : Wikipedia

Base64는 이메일이나 SMS와 같은 데에서 많이 사용되고 있다고 합니다.



1. 소스 코드


        static void Main()
        {
            string str = "도도";
            str = EncodeTo64(str);
            Console.WriteLine(str);
            str = DecodeFrom64(str);
            Console.WriteLine(str);
        }
        public static string EncodeTo64(string toEncode)
        {
            byte[] toEncodeAsBytes = System.Text.Encoding.Unicode.GetBytes(toEncode);
            string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
            return returnValue;
        }
        public static string DecodeFrom64(string encodedData)
        {
            byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
            string returnValue = System.Text.Encoding.Unicode.GetString(encodedDataAsBytes);
            return returnValue;
        }
}

출력 결과


[첨부(Attachment)]

101223_C#_Base64_example.7z

 

반응형
728x90
300x250

[Win2003] IIS 6 - ASP.NET CS0016 : Could not write to output file 에러 해결 방안

Compiler Error Message: CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\버전\Temporary ASP.NET Files\myapp\xxxxx\xxxxx\App_GlobalResources.xxxxxxx.dll’ — ‘Access is denied.’

IIS6에 ASP.NET을 초기 설치 시 발생할 확률이 높은 오류입니다.
주로 컴파일러에 파일을 출력할 수 없을 때 발생하는 오류입니다.


1. 해결방안

32bit일 때 Framework 경로
C:\Windows\Microsoft.NET\Framework\버전\Temporary ASP.NET Files\
64bit일 때 Framework 경로
C:\Windows\Microsoft.NET\Framework64\버전\Temporary ASP.NET Files\

공통사항 임시 폴더
C:\Windows\Temp


Everyone과 Network Service의 권한을 전체 허용으로 해줍니다.
반응형

+ Recent posts