본문 바로가기

728x90

전체 글

(143)
폴리비오스(Πολύβιος) 암호, 12513414113422 역사서를 저술한 폴리비오스(Πολύβιος)가 개발한 암호로 오래된 고전암호에 속한다. 고전암호라고해서 암호화 성능이 결코 떨어지지 않는다. 알파벳은 가로 5, 세로 5개의 2차원 행렬로 표현된다. 위 테이블에서 평문이 'RUSSIA'라고 한다면 42 45 43 43 24 11이 된다. ★ 암호테이블의 순서를 섞은 후 암기하도록 하면 암기한 사람만이 그 정답을 알 수밖에 없다. 한글로 2차원 행렬로 표현될 수 있다. 평문을 '일본'이라고 한다면 23 54 14 21 44 12가 된다. C#을 사용하여 폴리비오스 암호를 구현하려면 1) 암호화할 문자열과 폴리비오스 사각형을 만든다. 2) 폴리비오스 사각형에 문자열을 채운다. 3) 특정 규칙에 따라 암호문을 생성한다. using System; namespac..
황금 비율(golden rate), 1.6180339887 신용카드의 가로×세로 비율은? TV나 모니터의 가로×세로 비율은? 고대 그리스나 로마 건축물의 가로×세로 비율은? 유명 미술작품 다윗의 미소(David's Smile)에 표현된 얼굴의 구성 요소간 가로×세로 비율은? 웹 디자인, 그래픽, 제품디자인에서 가장 많이 적용된 가로×세로 비율은? 음악 리듬에서 가장 심리적 안정감을 느끼는 가로×세로 비율은? (물론, 신비감이나 마케팅적인 요소가 들어 있을수도 있다.) 1.618033 황금비율(Golden Ratio)은 수학기호 φ (phi) 또는 Φ (Phi)라는 심볼로 표현되며, 대략 1.6180339887의 값을 갖는다. 두 수 a와 b 사이에서, a를 b로 나눈 값이 a+b를 a로 나눈 값과 같을 때, 이를 황금비율로 표현한다. a / b = (a + b)..
파워-볼 숫자 암호, 1등은 3천만 원 파워볼은 동행복권 사이트에서 5분마다 추첨하는 추첨식 복권으로 1장당 1,000원이다. 1등 기본 당첨금은 3천만원+알파(최고 3억원) 일반볼 5개( 1~28개) + 파워볼 1개 = 총 6개 숫자를 선택하는 게임 using System; namespace LottoNumberGenerator { class Program { static void Main(string[] args) { Random random = new Random(); // 1부터 28까지의 숫자 중에서 5개를 랜덤하게 선택 int[] mainNumbers = new int[5]; for (int i = 0; i < 5; i++) { mainNumbers[i] = random.Next(1, 29); // 1 이상 29 미만의 숫자 중에서..
시저 암호, Vdpvxqj라고 쓰고 Samsung이라고 읽음. 영어단어 시저(Caesar)는 독일에서는 카이저(kaiser), 러시아에서는 '차르(czar)'라고 하며 뜻은 '황제'다. 시저 암호는 로마 시대의 황제 시저가 사용한 것으로 알려져서 이 같은 이름이 붙여졌다. 시저 암호는 가장 간단한 치환 암호 방법이다. 시저 암호의 작동 방식은 주어진 암호화할 텍스트(평문)에서 각 문자를 알파벳에서 일정한 거리만큼 앞이나 뒤로 이동시켜 암호화한다. 이 거리를 "시프트 값"이라고 한다. 예를 들어, 시프트 값이 3이라면 'A'는 'D'로, 'B'는 'E'로 바뀐다. 암호화에 사용한 시프트 값을 알고 있으면 쉽게 암호화된 메시지를 해독할 수 있다. using System; class Program { static string CaesarCipher(string text,..
린겐 서명 암호, Lattice Signature 린겐 서명은 격자 기반 암호화의 한 형태로 양자 암호화의 한 종류다. privateKey 생성: GeneratePrivateKey 함수는 주어진 크기와 모듈러 값에 따라 무작위 개인키를 생성한다. 개인키의 각 요소는 0부터 q-1까지의 값을 가지게 된다. publicKey 생성: GeneratePublicKey 함수는 개인키와 격자의 차원, 모듈러 값을 사용하여 공개키를 생성한다. 각 공개키 요소는 개인키의 요소들과 함께 계산되는데(이 때 특정한 수식과 계산 방식을 사용한다.). 공개키의 각 요소는 개인키의 요소를 활용하여 계산되며, 이때 격자의 차원에 따라 계산이 이루어진다. 이 과정이 린겐 서명의 핵심적인 계산 과정 중 하나가 된다. 아래 코드는 린겐 서명의 개념을 실험적으로 볼 수 있다. 개념적으로..
5개의 조, 그리고 6개의 번호, 연금복권 오해가 없길 바란다. 아래의 코드는 숫자를 좋아하고 암호에 흥미를 갖는 학생이나 일반인에게 흥미를 가질 수 있도록 만든 프로그래밍 소스 코드다. 실제로 로또나 연금복권의 숫자를 맞출 수 없으며 확률적으로도 불가능에 가깝다. 연금복권은 1,2,3,4,5 중에 1개의 조를 고르고 0,1,2,3,4,5,6,7,8,9를 조합해서 6자리 번호를 선택한다. 로또와는 달리 숫자가 중복될 수 있다. using System; using System.Text; namespace RandomNumberGenerator { class Program { static void Main(string[] args) { Random random = new Random(); // 1부터 5까지의 임의의 숫자 선택 int selected..
로또 번호 6개, 15, 17, 27...... 로또는 45개의 숫자들 중에서 6개 숫자를 선택하고 그 숫자가 추첨되면 상금을 지급받는 복권이다. 로또는 매주 토요일 8시에 추첨된다. 로또 추첨은 무작위로 선택된 숫자 6개가 일치해야 한다. 온라인에서는 5천원 이내의 금액만 구입할 수 있다. 이번 주 로또 추첨을 위해 무작위로 추출되는 로또 번호를 만들어보자. using System; using System.Collections.Generic; namespace RandomNumberGenerator { class Program { static void Main(string[] args) { List numbers = new List(); for (int i = 1; i
숫자 전치 암호, 짐 캐리의 <넘버23> 9161938535 2007년에 나온 영화 23쌍의 염색체로 이루어진 인간의 세포, 적혈구가 인간의 몸 한 바퀴를 도는 데 걸리는 시간은 23초, 유클리드 기하학의 정의 23개, 중세 템플기사단 역대 수장 23명, 악마의 연회일 6월 23일, 시저 황제 23번 찔림, 주요 테러사건 발생일(2001년 9월 11일)의 합 23, 타이타닉 침몰일(1912년 4월 15일)의 합 23, 일본 히로시마에 원폭이 투하된 시간(오전 8시 15분)의 합 23, 체르노빌 원전폭발 사고가 새벽 1시 23분에 발생 지구 자전축은 23.5도 기울어져 있고, 마야 문명은 2012년 12월 23일이 종말이었다. 게다가 영화 주인공과 관련된 모든 숫자도 23이었다. "전치 암호(Transposition Cipher)"는 숫자만을 위한 암호화이다. 이 ..

728x90