본문 바로가기

전체 글

(234)
[암호학] 단일치환 암호_Affine 암호 Affine 암호 곱셈 암호와 덧셈 암호를 병합하여 구현한 것으로 2개의 Key를 갖는다. 첫번째 Key는 곱셈 암호의 키로서 역원을 갖는 곱셈 암호의 키 집합인 Z26*의 요소이고, 두번째 Key는 덧셈 암호의 키로서 알파벳 집합 Z26의 요소이다. C = (K1 * P + K2) mod 26 f(x) = (a * x + b) % 26 => 기울기가 a 이고, y 절편이 b인 직선의 방정식 또는 일차 함수 Affine 암호식은 다음과 같은 3가지 조건을 가진다. 1) 곱셈 암호키 a(K1)는 곱셈에 대한 역원을 가져야 하므로 26과 서로소이어야 한다. gcd(a,26) = 1 2) a는 0이 아니어야 하고, 1~25 사이의 값이다 3) b는 0 ~25 사이의 값이다. public class Affine..
[암호학] 모듈로 연산(Modular Artimetic) 모듈로 연산(Modular Artimetic) 나머지를 구하는 연산을 의미 - a mod n = r - a를 n으로 나눈 나머지는 r일 경우 위와 같은 식으로 표기. n은 모듈로라고 부르고 r은 나머지 라고 부른다. - a는 정수, n은 양의 정수, r은 0을 포함한 양의 정수 ex) 12 mod 11 = 1 -12 mod 11 = 10 => 원래는 -1이나 음수가 되면 안되므로 모듈로 11을 더해서 10 합동 (Congruence) 어떤 수로 나눈 나머지가 같을 때 - 3 mod 12 = 3 15 mod 12 = 3 => 3 ≡ 15 (mod12). 3과 15는 모듈로 12에 대해서 합동이다. 공역(Zn) - 어떤 함수를 적용하였을 경우 나올 수 있는 모든 값의 집합 - 합동식에서 모듈로 연산자를 적용..
[C#] TCP/IP 소켓 프로그래밍_ 소켓 기초용어 정리 소켓이란? - 물리적으로 연결되어 있는 네크워크상에서 데이터 송수신에 사용할 수 있는 소프트웨어 장치 - TCP/IP 3계층 중 2,3 계층을 class로 구현한 것 Port - A단말기에서 B단말기로 데이터가 전송된다고 하면 B단말기에 실행중인 프로세스가 많을 것. 그 중 어느 프로그램으로 도착할 것인지를 구분짓는 식별자 - 하나의 단말기 내에서 포트번호가 중복되면 안된다 TCP(연결지향형) - 데이터의 순서, 도착 보장 tcp는 패킷에 번호를 부여. 받는 쪽에서는 번호 순서로 데이터를 받는다. 받는 단말기에서 수신되었다면 보낸 단말기로 패킷을 전송하여 도착을 보장 - 데이터의 경계가 없다 - 서버와 클라이언트의 연결이 1:1. 신뢰성이 중요한 게임이나 채팅에 주로 사용 UDP(비연결지향형) - 데이터..
[C#] TCP/IP 소켓 프로그래밍_ 네트워크 기초용어 정리 네트워크 - 서로 다른 위치에 있는 단말기(컴퓨터, 스마트폰..)를 여러 통신매체(네트워크 장비들)를 이용해서 연결 시킨 것 IP주소 - 네트워크에 연결된 단말기를 식별하는 주소 도메인 - ip 주소를 매번 입력해서 접속하기는 어려우므로 'www.naver.com' 같은 형태로 변경 - 도메인 이름을 ip주소로 변경해주는 서버가 DNS TCP/IP 4계층 1. Link : 실제로 데이터를 보내고 받는 물리영역. 랜카드, 스위치.. 2. Internet: 데이터 전송 시 데이터가 어떤 경로로 어떤 목적지에 도착해야 하는지 라우팅 하는 계층 3. Transport: ip만으로 전송하는 것은 신뢰성이 없다. 인터넷 계층의 부족함을 보완한 계층. TCP, UDP 4. Application: 네트워크 활동의 기반..
[암호학] 단일치환 암호_곱셈 암호 곱셈 암호(Multiplicative Cipher) - 문자에 일정한 수(Key)를 곱해서 암호를 생성하는 방식 모듈러 연산 (Modular Arithmetic) - 모듈러 연산 "mod n" 에서 모듈러 곱셈이 역원을 갖기 위한 조건은 모듈러스 n과 서로소인 수만 역원을 가질 수 있 다. - 알파벳의 경우 mod 26 인 집합 Z26 = {0, 1, 2...25} 에서 26과 임의의 수 K의 최대공약수가 1이되면 이들은 서로소가 되고 K는 모듈러 곱셈의 역원을 갖게 된다. 즉, 1, 3, 5, 7, 9, 11, 15,17,19, 21,23, 25 를 Key 로 사용할 수 있다. /// /// 곱셈 암호 /// public class MultiCipher { public static string Encr..
[C#] 동시성 프로그래밍_비동기 스트림 비동기 스트림(asynchronous stream) - 비동기 적으로 다수의 데이터 항목을 수신하는 방법 - 비동기 열거 가능형인 IAsyncEnumerable를 바탕으로 만들어졌다. => 필요에 따라 항목을 만들 수 있으며 각 항목을 비동기적으로 만들 수 있다.
[암호학] 단일치환 암호_랜덤 치환 암호 랜덤 치환 암호(Random Substitution Cipher) - 각 문자마다 랜덤하게 다른 문자를 대응시킨 암호 - 외부에서 랜덤 키를 제공받거나 자체적으로 랜덤 키 테이블을 생성해서 메시지를 암호화, 복호화한다. - 'A~Z 배열'로부터 랜덤하게 문자 하나를 선택해서 이를 순차적으로 매핑 테이블에 저장 > 배열 삭제 후 다음 문자열을 매핑 테이블에 저장 > 모든 문자를 매핑 테이블에 저장할 때 까지 반복 public class RandomCipher { // 랜덤 매핑 테이블 private readonly char[] table; public RandomCipher(string keyTable = null) { // 외부에서 키를 제공할 경우 그 키를 사용 if (keyTable != null) ..
[Spring] JpaRepository 인터페이스 JpaRepository - JPA는 구현체인 Hibernate를 이용하기 위한 여러 API를 제공하는데, JpaRepository는 이 중 하나로 CRUD, 페이징, 정렬 등의 작업을 별도의 코드 없이 처리할 수 있게 지원하는 인터페이스 - Spring Data JPA에는 인터페이스의 기능을 통해서 JPA 관련 작업을 별도의 코드 없이 처리할 수 있게 지원 JpaRepository 상속 구조 사용 방법 - 일반적인 기능만 사용할 때는 CrudRepository를 사용, 모든 JPA관련 기능을 사용하고 싶을 때는 JpaRepository 사용 - JpaRepository 인터페이스를 상속받고, 엔티티의 클래스명과 @Id 타입을 지정 import org.springframework.data.jpa.repo..