본문 바로가기

분류 전체보기

(16)
[Spring] JPA Enum Converter 개선기 - 반복 코드 줄이기 배경 특정 데이터가 DB에서는 숫자로 표현되는 경우가 다수 있다. 예를 들어, 사용자 타입에 대한 정보를 저장할 경우 아래처럼 정의할 수 있다. 값 설명 1 정상회원 2 탈퇴회원 3 정지회원 4 블랙회원 해당 데이터를 그대로 사용하게 된다면 아래와 같게 된다. if (userInfo.getStatus() == 3) { // Do Something } 위 코드 같은 경우 직관적으로 해당 값이 무엇을 의미하는지 알 수 없어 DB 명세서를 자주 확인해봐야한다. 만약 이전 코드처럼이 아니라 아래처럼 되어 있다면?? if (userInfo.getStatus().equals(UserStatusType.SUSPENDED)) { // Do Something } 단순 숫자 값을 사용했을 때 보다 훨씬 더 직관적이고 명세..
이진수로 음수 표현하기 (2의 보수) -5를 이진수로 표현하려면 어떻게 해야할까? 여러 방법이 있지만 그 중에 가장 잘 알려진 방법이 바로 2의 보수(two's complement)를 구해서 해당 값을 음수로 간주하는 것이다. 2의 보수의 사전적 의미는 "어떤 수를 그보다 큰 2^n에서 뺀 값"이다. 예를 들어, 101의 보수는 101보다 큰 2^4 = 1000에서 101을 뺀 011이다. (급하다면 아래 부분을 건너뛰고 넘고 마지막 부분을 확인!) 아래 공식을 참고해서 빼기를 진행하면 된다. - 1에서 0을 빼면 1 - 1에서 1을 빼면 0 - 0에서 0을 빼면 0 - 0에서 1을 빼려면 왼쪽에서 가장 가까운 1을 빌린다. 빌려준 값은 0이 되고 빌린 값은 2가 되어, 거기서 1을 빼 1이 남는다. 그럼 빼기를 진행해보자 1) 101보다 ..
이진수를 십진수로 변환하는 방법 (이진법|십진법) 정의 지난 글에 이진법을 다음과 같이 정의했다. 이진법(binary) 0과 1만으로 숫자를 표현하는 방법이다. 이진법은 숫자가 1을 넘어가는 시점에 자리 올림 한다. 십진수 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 이진수 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 이렇듯 자리에 1이 생기면, 그 다음 숫자를 표현하기 위해서는 다음 자리가 1이 된다. 패턴 여기서 몇가지 패턴을 살펴볼 수 있다. 1. n bit로 표현할 수 있는 숫자의 개수는 2^n개다. ex) bit 3개로 표현 가능한 수는 2^3 = 8개다. 2. n bit로 표현 가능한 가장 큰 양수는 2^n - 1이..
비트, 바이트, 십진법, 이진법, 십육진법 컴퓨터가 이해할 수 있는 정보는 모두 0과 1로 표현된다. 비트(bit) 이때 컴퓨터가 이해할 수 있는 가장 작은 정보 단위를 비트(bit)라고 한다. 1 비트로 표현할 수 있는 정보는 (0), (1), 총 2개다. 2 비트로 표현할 수 있는 정보는 (00), (01), (10), (11), 총 4개다. 3 비트로 표현할 수 있는 정보는 (000), (001), (010), (011), (100), (101), (110), (111),총 8개다. 이쯤되면 패턴이 보일 것이다. n비트로 표현할 수 있는 정보의 개수는 2^(n)이다. 바이트 (byte) 바이트는 비트보다 한 단계 큰 단위로 8bit의 묶음을 뜻하고 따라서 2^8, 즉 256개의 정보를 표현할 수 있다. 추가로 우리가 흔히 메모리 사이즈를 측..
SEED 암호화 - KISA 설명 KISA에서 SEED 암호화 소스코드를 제공하지만 오래전에 작성되었던 탓인지 python으로 된 파일이 없었다. 그래서 검색으로 여러 사이트를 참고해 암호화 클래스를 작성했다. SEED 암호화란? SEED는 128 bit의 대칭키를 이용하여 임의의 길이를 갖는 입력 메시지를 블록단위로 처리하는 128 bit 블록암호 알고리즘이다. - 대칭키 암호화 => 암호화 키와 복호화 키가 같은 암호 방식 - 128bit = 16 byte bit | byte | hex bit 컴퓨터에서 사용되는 가장 작은 데이터 단위 2진수로 0과 1을 가질 수 있다. byte 8 bits으로 구성된다 (즉, 8 bits = 1 byte) bits으로 이루어진 byte array는 2진수로 이루어진 데이터이지만 사람이 읽기 어려워 ..
SEED 암호화 코드 - KISA 암호화 클래스 from cryptography.hazmat.backends.openssl.backend import backend from cryptography.hazmat.primitives.ciphers import algorithms, base, modes import base64 class SEED128: def encrypt(self, key, txt): key_bytes = self.convert_key_to_byte_array(key) padded_txt_bytes = self.convert_txt_to_padded_byte_array(txt) encrypted_txt_bytes = self.seed_encrypt(key_bytes, padded_txt_bytes) b64_encrypted..
[번역] 최신 모드, "use strict" 원글 The modern mode, "use strict" 오랫동안 자바스크립트는 호환성 문제 없이 진화했다. 이전 기능은 변경되지 않으면서 새로운 기능이 언어에 추가 되었다. 이 사실은 기존에 작성한 코드가 절대 깨지지 않는다는 장점이 있었다. 하지만 단점은 자바스크립트의 제작자들이 한 실수나 불완전한 결정은 영원히 그 언어에 남게 된다는 것이다. 2009년 ECMAScript 5(ES5)가 등장하기 전까지는 그랬다. ES5는 언어에 새로운 기능을 추가했고 기존에 있던 몇 가지 기능들을 수정했다. 이전 코드가 계속 작동되도록 하기 위해 이러한 수정 내용은 기본적으로 해제되어 있다. "use strict"라는 특별한 지시어로 명시적으로 활성화해야 한다. "use strict" 지시어는 문자열 형태이다: ..
[Chrome] 94버전 보안 취약점 긴급 업데이트 : Use-After-Free in Portals 추석인 지난 9월 21에 Google은 Chrome 94 버전을 릴리즈했다. 그리고 얼마 지나지 않아 24일에 고위험군(High)으로 분류된 취약점의 보안 업데이트를 올렸고 사용자들에게 해당 업데이트를 받았는지 확인하기를 강력하게 권고하고 있다. 고위험군은 분류에서 두 번째로 높은 분류이다. 무슨 일이 일어났던 것일까? 한줄로 요약하자면 문제의 핵심은 portals에 Use-After-Fee가 있었다는 것이다. 하지만 portals가 무엇이고 Use-After-Free는 무엇인지 모른다면 상황을 바로 이해하기가 어렵다. 그럼 portals가 무엇인지부터 살펴보자. 배경: Portals Google이 진행하고 있는 여러 프로젝트들 중에 Portals라는 프로젝트가 있다. 아직은 공식적인 단계가 아니라 개발..