프로그래밍 104

[암호화] openssl을 이용한 파일 암/복호화

개요 oepnssl을 이용하여 파일을 암호화하고 복호화한다. 사용 이유 개인 정보 보호 평문 파일 key.txt 암호화 cat key.txt | openssl enc -e -aes-256-cbc -pbkdf2 -k "password" > key.enc 복호화 cat key.enc | openssl enc -d -aes-256-cbc -pbkdf2 -k "password" 암화 부가 설명 AES, DES는 뭔가? 대칭키 블록 암호화 알고리즘의 한 종류입니다. 128, 192, 256은 뭔가? 키값, 숫자가 클수록 복호화가 어렵다고 보면 됩니다. cbc, ebc 은 뭔가? 암호화 운영 모드 즉 평문을 여려 개(블록단위)로 조각냈을 이 조각들의 관계를 어떠한 방식으로 엮어서 암호화할 것 인가에 대한 설정 pb..

[compile] compile 에러 별 대처 방안

undefined symbol 에러 원인 : 흔히 어떤 함수를 사용하려고 하는데, 실제 함수의 구현체가 없는 경우에 linking 하는 과정에서 발생하는 에러입니다. 해결 방안 : 라이브러리가 빠졌는지 확인 하면됨 undefined reference to 에러 원인: 컴파일 시, 헤더 파일에 선언은 되어있으나, 소스 파일에 정의가 안되어 있다는 의미입니다. 해결 방안 : 소스파일이 빠졌는지 확인 하면됨. https://nglee.github.io/2018/10/11/Study-Linker-Options.html

[compile] compile 에러 별 대처 방안

undefined symbol 에러 원인 : 흔히 어떤 함수를 사용하려고 하는데, 실제 함수의 구현체가 없는 경우에 linking 하는 과정에서 발생하는 에러입니다. 해결 방안 : 라이브러리가 빠졌는지 확인 하면됨 undefined reference to 에러 원인: 컴파일 시, 헤더 파일에 선언은 되어있으나, 소스 파일에 정의가 안되어 있다는 의미입니다. 해결 방안 : 소스파일이 빠졌는지 확인 하면됨.

[linux] libc와 glibc의 차이

개요 libc가 뭐고 glibc가 무엇인지 알아 봅니다. 결론 libc는 "표준 C 라이브러리"를 말하는 대 명사이고 glibc는 GNU에서 만든 libc 입니다. 그래서 https://man7.org/linux/man-pages/man7/libc.7.html 에서 보면 libc의 종류를 3가지의 분류 합니다. libc의 종류 glibc - pathname : /lib/libc.so.6 - 상세 설명 : 1992 이후로 linux에서 가장 많이 사용되는 libc linux libc - pathname : libc.so.5 - 상세 설명 : 1990년에 glibc의 대시 잠깐 나왔다 사라진 libc other C libraries - uClibc : 경량화 libc - dietlibc : 경량화 libc ..

[compile] 공부 해야 할 것

https://asung123456.tistory.com/18 Ubuntu C/C++ shared library 컴파일하기 fPIC 옵션 GOT, PLT c++ g++ -shared -fPIC -o g++ -shared fPIC -o lib.so code.cpp c gcc -shared [-fPIC] -o gcc -shared [-fPIC] -o lib.so code.c -fPIC 생략가능 하지만 공유라이브러리를 만들 때는 -fPIC 옵션 사용을 권장합니.. asung123456.tistory.com https://www.lesstif.com/software-architect/shared-library-linker-loader-12943542.html 동적 라이브러리(shared library)와 Lin..

[systemd] systemd를 시용한 자가 업데이트 로직

[개요] linux상에서 프로그램 스스로 종료 시키고 재시작 하는 방법을 정리 합니다. [Flow] 1. Program A 내부에서 update를 수행 하는 스크립트를 실행 system("nohup update.sh fork 2>&1 > /dev/null &"); 을 system 명령어로 실행 2. "update script"는 system 명령어로 실행 되어 Prorgam A의 socket 정보 까지 모두 상속 받게 되었음으로 강제로 열려있는 fd를 종료 합니다. for fd in $(ls /proc/$$/fd/); do [ $fd -gt 2] && exec {fd}

프로그램 중복 실행 확인 코드

개발 방향 pid와 symbolic link를 사용하여 프로그램의 중복 확인을 확인 한다. 개발 절차 1. 현재 process의 process 이름과 pid와 현재 실행 절대 경로를 구함 2. ps -ef 를 통하여 prceess 이름과 동이란 process의 pid를 구함 3. 2번에서 구한 pid를 /proc/ 및에서 찾아서 실행 파일의 경로를 찾아냄 3. 찾은 경로와 1번에서 경롸 3번에 찾은 경로를 비교하여 중복 실행을 확인 코드 #include #include #include #include bool CheckDuplicatiedProcess(std::string process_name) { FILE *fp = nullptr; char run_pid[64] = {0, }; char cur_pat..

bash shell 키워드 의미

ESC csh 파일명 완성 RETURN csh, sh 명령 실행 space csh, sh 아규먼트 구분 TAB csh, sh 아규먼트 구분 TAB bash 파일명 완성 # csh, sh 코멘트 시작점 ` csh, sh 명령 대치(backquotes) ” sh 불완전 quote $, `, \ 의 의미는 희석시키지 못함 ” csh 불완전 quote $, `, ! 의 의미는 희석시키지 못함 ‘ csh, sh 완전 quote 모든 문자의 의미 희석 \ csh, sh 한 문자를 quote $var csh, sh 변수 ${var} csh, sh $var와 같다. $var:mod csh var를 편집자인 mod로 편집한다. => 나중에 다시 설명 ${var-default} sh var가 정의되어 있지 않으면 defa..