글쓴이 보관물: Jinsu

RSA 암호알고리즘

  1. RSA와 소인수분해
  2. DES와 RSA의 암호화/복호화 비교
  3. RSA 암호화 알고리즘 실습

1. RSA와 소인수분해

RSA 암호체계의 안정성은 큰 숫자를 소인수분해 하는 것이 어렵다는 것에 기반을 두고 있다.

어떤 두 개의 소수 p=7, q=11을 잡고 pq를 계산하는 거는 어렵지 않다. 77 또한 숫자를
소인수분해 하는 것 또한 쉽다. 하지만 9735 이렇게 큰 수도 시간이 걸리지만 할 수 있지만

이렇게 큰 수는 1993년 8월부터 1600대의 컴퓨터를 사용하여 8개월이란 시간이 걸려서
소인수분해를 완료하였다. pq를 곱하는 것은 컴퓨터를 활용하면 1초도 안 걸리지만,
역으로 하게 되면 엄청난 시간이 소요된다.

이렇게 소인수분해의 어려움 n=pq로 소인수분해 될 때 p, q를 구하는 소요시간이 많이 필요하여 이를 암호로 사용하는 알고리즘이 바로 RSA 알고리즘이고, 소수가 무한하기에 RSA 앞에 숫자를 붙여준다.

위의 92자리 숫자를 이진법으로 고치면 129자리가 되고 이 문제를 RSA –129 문제라고 한다.

2. DES와 RSA의 암호화/복호화 비교

출처 : Naver Blog

3. RSA 암호화 알고리즘 실습

  1. genrsa 명령어를 사용하여 비밀키(private.pem)를 생성한다.
  2. rsa 명령어를 사용하여 공개키(public.pem)를 생성한다.
  3. 공개키 암호화를 위한 파일을 생성한다.
  4. 공개키를 사용하여 파일을 암호화한다.
  5. 개인키를 사용하여 파일을 복호화한다.
RSA 2048 비밀키 생성
RSA 2048 비밀키
공개키생성
공개키 암호화를 위한 파일 생성
공개키를 이용하여 파일 암호화 및 암호화 파일 확인
개인키를 이용하여 파일 복호화 및 복호화 파일 확인

중간고사를 준비하며 배웠던 내용에서 추가적으로 공부하며 글을 작성하였습니다.
다음 글의 주제는 WebPage 입니다. 홍보 포스터 업로드와 사진, 글 등 블로그 형식의
WebPage 제작 예정입니다.

선택정렬(Selection Sort)

선택 정렬(Selection Sort)이란?

1. 리스트의 최솟값을 찾는다.

2. 그 값을 리스트의 맨 앞자리 값과 교체한다.
(맨 앞자리 값이 최솟값일 경우 Pass)

3. 1,2 과정을 정렬이 완료 시점까지 반복.

출처 : Naver 이미지

선택 정렬 C코드

#include<stdio.h>
int main()
{
    int A[10], i, j, c, k;
    for(i=0 ; i<10 ; i++)
    {
        scanf("%d",&A[i]);        //숫자 10개를 입력 받는다.
    }
    for(i=0 ; i<9 ; i++)              //맨 앞자리 숫자를 잡아준다.
    {
        for(j=i+1 ; j<10 ; j++)//맨 앞자리 숫자를 제외한 리스트 값을 비교한다.
        {
            if(A[i] > A[j]) // 최솟값이 순서대로 Swap한다.
            {
                c = A[i];
                A[i] = A[j];
                A[j] = c;
            }
        }
        printf("정렬 %d회 : ",i+1); //정렬 과정을 출력한다.
        for(k=0;k<10;k++)
            printf("%d ",A[k]);
        printf("\n");
    }
}

선택 정렬 알고리즘 핵심

for(i=0;i<9;i++)              
{
   for(j=i+1;j<10;j++) //j=i+1 초기 값 설정으로 정렬된 리스트에 영향 X
   {
       if(A[i]>A[j])//조건 식에 따라 오름차순 또는 내림차순으로 정렬 가능.
       {
           c=A[i];     //모든 정렬에서 핵심 부분이다.
           A[i]=A[j];  //각 칸마다 있는 리스트 숫자를 서로 Swap 위해서는
           A[j]=c;     //변수c를 사용하여 리스트의 숫자를 보관한다. 
       }
    }
}

선택 정렬 추가 알고리즘(함수)

int SelectionSort(int SortList, int n)
{
   int i, j, min = 0, sp = 0;
   for (i = 0; i < n - 1; i++)
   {
      min = i;
      for (j = i + 1; j < n; j++)
      {
	if (SortList[min] > SortList[j])
	min = j;
      }
      //리스트 중 가장 작은 값과 SortList[i]값 Swap Code.
      sp = SortList[i];
      SortList[i] = SortList[min];
      SortList[min] = sp;
      }
}

선택 정렬 알고리즘을 함수(SelectionSort)로 사용하는 방법도 있습니다.

활동을 하면서 글의 주제 선정과 방향성에 대해서도 아직 부족하다고 느낍니다.
프로그래밍 언어와 관련된 코딩 공부와 전공에 관한 실습에 대해서도 추가적으로 공부하여 글을 올려볼 예정입니다. 저의 글을 보시고 편하게 피드백 해주시면 감사하겠습니다.