본문 바로가기

728x90

분류 전체보기

(137)
[파일]같은 숫자를 찾아내는 코드, 9 사람은 숫자를 보고 읽고 그 숫자의 의미를 판단하지만 기계나 컴퓨터는 그렇게 스마트하지 않다. 완벽하게 일치하는 이미지라면 쉽게 찾지만 약간의 픽셀값만 달라져도 찾기 어려워한다. 찾기 어려워한다면 추가적인 코드 작업이 필요하다. 아래는 숫자 9 암호 이미지와 같은 이미지를 타켓이미지에서 찾아내는 코드다. 이번에는 C#으로 만들지않고 같은 .NET 프레임의 VB로 만들었다. 소스 파일은 사용된 이미지를 포함하여 아래에서 다운받을 수 있다. 왼쪽 버튼은 찾을 대상 암호를 불러오고 오른쪽 버튼은 검색 대상 이미지를 불러온다. 중앙의 수행 버튼은 암호이미지와 같은 이미지를 대상 이미지에서 찾고 빨간색 테두리 블럭을 만들어준다. DrawRedBox( ) 함수는 그래픽을 그려주는 기능일 뿐이다. 중요한 함수는 Co..
[파일]그림 안에 그림 은닉 기술, Steganography 스테가노그래피 암호화는 일반적인 이미지처럼 보이지만, 내부에 숨겨진 작은 그림이나 메시지가 들어있다. 작은 그림이나 메시지는 감지하기 어렵다. 이 암호화 방식은 주로 디지털 이미지나 미디어 파일에 적용되며, 주요 목표는 암호화된 정보를 눈에 띄지 않게 전송하거나 저장한다. 이 방식은 디지털 워터마킹(저작권 보호)나 메시지 은닉에 사용된다. [예제 파일를 사용하는 방법] 1. 왼쪽 버튼으로 암호이미지를 선택 2. 오른쪽 버튼으로 암호이미지를 심을 일반 이미지를 선택 3. 가운데 버튼으로 암호이미지를 일반 이미지에 그린다. ★ 태극기 이미지를 세계지도에 작은 픽셀로 만들어 심는 예제 using System; using System.Collections.Generic; using System.Component..
폴리비오스(Πολύβιος) 암호, 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..

728x90