개인키와 공개키 만들기
RSA 암호 알고리즘 첫 단계는 공개키와 개인키를 만드는 것이다.
공개키는 n, e 라는 두 정수로 이루어져 있고 개인키는 n, d라는 두 정수로 이루어져 있다.
n의 비트수는 적어도 1024비트가 되어야 한다. 즉, 2^1024 근방에 있는 수거나 209자리 이상의 십진수가 되어야 한다.
두 개의 소수 p와 q는 적어도 512비트가 되어야 한다. 즉, p와 q는 2^512 근방에 있는 수거나 154자리 이상의 십진수가 되어야 한다.
p와 q는 같지 않고 거의 같은 크기의 소수이어야 한다.
p-1과 q-1은 커다란 소인수를 각각 가져야 한다.
p-1과 q-1의 최대 공격수는 작은 수어야 한다.
캡슐화는 객체 지향 프로그래밍에서 다음 2가지 측면이 있다
고정 크기 배열에 기반한 리스트
용량은 가급적 미리 설정하는 게 좋습니다.
일반적으로 ArrayList 크기를 정확히 결정하고 시작하는 게 성능이 좋습니다.
ArrayList
고정 크기 배열에 기반한 리스트 용량증가시 초기설정값만큼 증가 (메모리 낭비)
LinkedList
동적으로 요소 추가
배열은 인덱스를 가진 데이터의 집합이고, 리스트는 인덱스 없이 순차적으로 저장된 데이터의 집합이다.
배열은 메모리에 연속적으로 저장되고 리스트는 메모리에 분산 되어 저장된다.
배열은 랜덤 엑세스( 한번에 중간값 접근 )가 가능하지만 중간에 데이터 삽입/삭제가 어렵다. 하지만, 리스트는 랜덤 엑세스가 불가능하지만 중간에 데이터 삽입/삭제가 쉽다.
List는 순서가 있는 Collection입니다. List에 데이터를 넣는 순서가 보장되며, 그렇기 때문에 index로 특정 아이템을 가져올 수 있습니다.
Set는 순서를 보장하지 않는 Collection입니다. 그렇기 때문에 index로 특정 아이템을 가져올 수 없습니다.
List는 중복을 허용합니다. 즉, 중복된 아이템을 List에 추가할 수 있습니다.
Set는 중복을 허용하지 않습니다. 즉, 중복된 아이템은 Set에 추가되지 않습니다. 중복된 값을 추가하려고 하면 무시됩니다.
contains(element)는 Collection에 데이터가 존재하는지 확인하는 메소드입니다. List의 contains 실행 속도는 O(n)이지만, Set는 O(1)으로 매우 빠릅니다. 탐색이 잦다면 Set를 고려해볼 수 있습니다.