기본 콘텐츠로 건너뛰기

추천 가젯

OpenSSL 명령어로 비대칭 암호화하기 (공개키로 암호화하고 비밀키로 복호화하기)

비대칭 암호화 암호화 키와 복호화 키가 서로 다른 비대칭 암호의 특징을 이용하여 공개키로 암호화하고 비밀키로 복호화할 수 있다. 우선 이전에 생성한 private.pem 과 public.pem 이 필요하다. 비밀키는 계속 가지고 있고, 통신을 하고자 하는 사람에게 공개키를 전달한다. 그 다음 공개키를 가진 사람이 공개키로 암호화하고, 암호화한 결과를 전달한다. 이 과정은 도청되어도 비밀키를 알아낼 수 없기에 원문을 도청자가 알아낼 수 없다. 원문 준비하기 원본은 다음과 같이 준비한다. 주로 대칭 암호화를 사용할 키를 전달할 때 공개키 암호를 보조하여 사용하므로, 여기서는 키파일을 생성하겠다. echo -n "key=" > key.txt openssl rand -hex 32 >> key.txt echo -n "iv=" >> key.txt openssl rand -hex 16 >> key.txt 그러면 key와 iv가 포함된 파일이 완성된다. 이 파일을 안전하게 전달하기 위해 암호화한다. 공개키로 암호화하기 openssl pkeyutl -encrypt -pubin -inkey [public.pem] -in [key.txt] -out encrypted.bin openssl pkeyutl : openssl에서 제공하는 low-level 공개키/개인키 연산 유틸리티인 pkeyutl 을 이용한다. -encyprt : 암호화를 한다. -pubin : 입력받을 키의 종류를 공개키로 지정한다. -inkey [입력키] : 입력받을 키를 지정한다. 암호화를 할 때는 공개키를 지정한다. 필자는 'public.pem'으로 지정하였다. -in [입력파일] : 입력파일을 지정한다. 암호화를 할 때는 원문을 지정한다. 필자는 위에서 생성한 'key.txt'로 지정하였다. -out [출력파일] : 출력파일을 지정한다. 출력된 결과는 암호문이므로 저장될 이름을 지정한다. 필자는 'e...

[과제] 주차요금 정산기

문제

입차시간(시,분)과 출차시간(시,분)을 입력받아 주차시간과 주차요금을 출력하는 프로그램을 작성하시오. 단, 입차시간과 출차시간을 인자로 주차시간을 반환하는 함수와 주차시간을 인자로 주차요금을 반환하는 두 개의 함수를 작성하고 주차요금은 10분당 1000원으로 가정한다. 예로 주차시간 10분은 1000원, 11분은 2000원으로 계산한다.


풀이

#include <stdio.h>


int parkingtime(int in_hour, int in_minute, int out_hour, int out_minute);
int money(int parkingminutes);
int main()
{
int in_hour, in_minute;
int out_hour, out_minute;
int parkingminutes;
int parking_fee;

printf("몇 시 몇 분에 들어오셨나요? : ");
scanf_s("%d %d", &in_hour, &in_minute);
printf("몇 시 볓 분에 나가셨나요? : ");
scanf_s("%d %d", &out_hour, &out_minute);
parkingminutes = parkingtime(in_hour, in_minute, out_hour, out_minute);
printf("당신은 %d분 주차하였습니다.\n", parkingminutes);
parking_fee = money(parkingminutes);
printf("요금은 올림정책에 의해 %d원입니다.\n", parking_fee);

system("pause");
return 0;

}

int parkingtime(int in_hour, int in_minute, int out_hour, int out_minute)
{
int minute = 0;
minute += (out_hour - in_hour) * 60 + out_minute - in_minute;
return minute;
}

int money(int parkingminutes)
{
int temp_ten_minutes = parkingminutes / 10;
temp_ten_minutes *= 10;
if (parkingminutes > temp_ten_minutes)
temp_ten_minutes += 10;

return temp_ten_minutes * 100;
}

실행결과


댓글

가장 많이 본 글