프로그래밍 354

MIME 타입

MIME 타입은 클라이언트에게 전송된 문서의 형식을 알려주기 위한 메커니즘이다. 웹 서버는 브라우저들이 각 리소스를 내려받았을때 해야할 기본 동작이 무엇인지를 결정하는데 도움을 주기위해 올바른 MIME 타입을 제공 해주어야한다. MIME 타입 외에도 매직 넘버(Magic number)라고 하는 파일을 열면 가장 처음보이는 16진수값들로 파일 형식을 구분할 수 있기도하지만 100% 신뢰할만한 시스템은 아니다. - GIF: 47 49 46 38 - PNG: 89 50 4E 47 # 일반적인 구조 type/subtype '/'로 구분된 두개의 문자열인 타입과 서브 타입으로 구성됨. 스페이스는 허용하지 않는다. # 대표적인 타입과 서브타입 예시 타입 설명 일반적인 서브타입 예시 text 텍스트를 포함하는 모든 ..

[C#] VS Code 개발환경 설정하기

1. Extensions Market에서 C# Extension을 설치 2. dotnet 패키지 설치 * 저는 homebrew로 설치했어요. $ brew install dotnet 3. .NET Core 설치 https://dotnet.microsoft.com/en-us/download 3. dotnet new 를 통해 새로운 C# 프로젝트 생성 뒤에 -o 옵션을 붙이면 프로젝트 이름대로 생성된다. dotnet new console -o TestProject C# 연습을 위해 콘솔 출력하고 놀거라서 console이라고 템플릿 유형을 지정했는데, 아래처럼 프로젝트 유형에따라 템플릿 Short Name 넘겨서 설정할 수 있다. Templates Short Name Language Tags ----------..

프로그래밍/C# 2022.02.11

[Android] 안드로이드로 게임을 만들어 보았다

그것이 유저를 위해서라면... 게임 멤버십 서비스 플레이오는 모바일 게임을 플레이 하고, 게임 플레이에 대한 보상을 받을 수 있는 앱이다. 앱 특성상 사용 연령대는 어린편이나 게임 시간 측정을 위해 안드로이드에서 오버레이 권한과 앱 사용시간 접근을 허용하는 등 처음 사용법이 다소 어려운 편이다. 그래서 유저 튜토리얼을 추가하여 훈련시켜보는 건 어떨까하는 생각에 ... 앱에서 튜토리얼을 위한 모의 게임을 만들자! 라고 제안했는데 받아들여졌고 결국 그렇게... 허접하지만 미니 게임을 만들게되었다. 이 글에서는 이번에 안드로이드에서 미니 게임을 만들면서 고려했던 문제들을 하나 하나씩 살펴보려한다. # 어떤 게임? 위 짤이 바로 만든 게임의 화면이다. 노란 새 버디가 유치원에 등교를 하는데, 버디의 부모님인 동..

컴퓨터가 2의 보수 표현을 사용하는 이유

# 컴퓨터의 연산장치가 사칙연산을 하는 법 - 덧셈 , 곱셈: 주어진 데이터 표현을 덧셈 or 시프트 연산 - 뺄셈, 나눗셈: 주어진 데이터 표현에 대한 보수(Complement)를 취하여 덧셈, 시프트 연산 컴퓨터는 데이터를 워드(Word)단위로 처리하는데, 운영체제에서 32bit, 64bit로 나누는 것을 보았을 것이다. 이는 바로 워드 사이즈를 가리킨다. 워드의 최상위 비트는 부호비트가된다. 부호비트가 0 = 양수, 1 = 음수다. 나머지 비트들은 데이터 값을 표현하는데 사용한다. 아래는 1워드가 8bit일때를 기준으로 십진수 -53을 비트로 나타낸 것이다. 최상위비트 최하위비트 부호비트 데이터 비트 1 0 1 1 0 1 0 1 # 왜 컴퓨터는 부호화-2의 보수표현을 사용할까? 1워드를 4bit로 ..

SSH 인증키 생성 및 간편 접속방법

# SSH Keygen으로 SSH 키 만들기 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519__ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa__ -f 지정된 파일 위치/이름으로 키를 생성한다. -t 지정한 암호화 알고리즘을 통해 키를 생성한다. dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 값이 간으하다. -b 생성할 키의 비트 수를 설정한다. 일반적으로 3072bit 정도면 충분하다. Passphrase란? ssh-keygen을 통해 키를 생성할때 passphrase를 묻는다. 비밀번호인데... 비밀키가 복사되어서 사용된다고 해도 passphrase를 입력하지 않으면 사용할 수 없으므로, 보안성을..

암호학에서 Salt란? 소금이 필요한 이유

# 솔트 (Salt) 해시 함수를 사용하여 단방향 암호화를 했을때, 언제나 같은 값을 같게 된다. 해커는 잘 알려진 해시값의 원문을 저장해두고 쉽게 원문을 유추할 수 있다. (이렇게 해시함수를 사용하여 만들어낼 수 있는 값들을 저장해둔 테이블을 레인보우 테이블이라고 한다.) 솔트는 이러한 꼼수를 피하기 위해 해시된 값에 추가적으로 들어가는 랜덤 데이터다. 비밀번호 "qwerty1234"를 SHA-256으로 해싱하면 아래와 같은 값이 나온다. 17F80754644D33AC685B0842A402229ADBB43FC9312F7BDF36BA24237A1F1FFB 이제 안전하겠지? 안타깝게도 Hash값을 RainbowTable에 넣어보면 순식간에 풀려버림 0ㅇ0 그래서 해시하기전에 임의의 랜덤 데이터 "LOU"를..

SSH 터널링 / 포트 포워딩 예시로 알아보기

# SSH란? 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜. 일반적으로는 Public key / Private key를 사용하는 비대칭 암호화(Asymmetric Encryption) 방식을 사용한다. Public Key가 자물쇠, Private Key가 자물쇠를 여는 열쇠라고 비유를 해서 그려본 그림이다. 중간에 누군가 박스를 탈취한다 하더라도 자물쇠는 오직 A/B 두사람만이 열수 있기때문에 보안성이 확보된다. # SSH 터널링이란? (SSH 포트 포워딩) SSH 클라이언트와 서버사이 연결이 수립되어 만들어진 통로가 "터널" 여기에 포트 포워딩(Port Forwarding)을 이용하면 만들어진 터널을 다른 애플리케이션이 이용할 수 있다. 방화벽을 우회할 수도있으며, 암호화를 지원하지 않는 프로그..

[SSH] UNPROTECTED PRIVATE KEY FILE 해결방법

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0755 for 'navercloud_lou.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. private key 파일의 퍼미션이 과도하게 설정되어 있어서 다른 유저가 건드릴 수 없도록 적절한 권한으로 낮추어주어야한다. 내..

Windows와 WSL 사용법 - 마운트 / 파일전송

WSL은 윈도우10이상에서 리눅스를 사용하기 위한 도구다. Windows에서 리눅스 계열 실행파일의 표준인 ELF binary 파일을 실행할 수 있게 해주는 호환성을 추가했다. * 자세한 설명은 이 링크가 도움이 될 것 같다. 명령 프롬프트 또는 Powershell에서 bash를 입력하면 WSL에 마운트 된다. WSL에서 /mnt/드라이브를 입력하면 원하는 드라이브를 마운트 시킬 수 있어 Windows 파일 접근이 가능하다. 파일 전송과 복사도 이걸 가지고 하면된다. $ cd /mnt/c/Users/ASUS/Downloads/ $ mv ./test.txt ~

내 소스 코드가 실행되기까지의 과정

# 컴파일 언어 컴파일(Compile)은 어떤 언어를 다른 언어로 바꾸어주는 과정이다. int a = 30과 같이 우리가 적는 코드는 사람이 이해하기 쉬운 고급언어(High-level language)라서 컴퓨터는 이를 이해하지 못한다. 컴퓨터는 고급언어로 작성된 코드를 컴파일러 또는 인터프리터를 통해서 저급언어(Low-level language)로 번역한 후에야 코드를 실행할 수 있다. 저급언어에는 기계어 (Machine language)와 어셈블리어 (Assembly language)가 있다. - 기계어 CPU가 명령을 처리할때 사용하는 언어, 2진수로 이루어져있다. 1000 1011 0100 0101 1111 1000 1000 0011 1100 0100 0000 1100 - 어셈블리어 기계어의 숫자..