배경
한 번 패드를 적절하게 사용하면 해킹하는 것은 불가능 입증 된 암호화의 한 형태이다.
암호화는 평문 (문자 AZ만으로 구성됨)을 취하고 같은 길이 (문자 만)로 임의의 문자열을 생성하여 수행됩니다. 이 문자열은 키 역할을합니다. 그런 다음 일반 텍스트의 각 문자가 키의 해당 문자와 쌍을 이룹니다. 암호문은 다음과 같이 계산됩니다. 각 쌍에 대해 두 문자 모두 숫자로 변환됩니다 (A = 0, B = 1, ... Z = 25). 이 두 숫자는 모듈로 26에 추가됩니다.이 숫자는 다시 문자로 변환됩니다.
해독은 정반대입니다. 암호문과 키의 문자가 쌍을 이루고 숫자로 변환됩니다. 그 후, 키는 암호문 모듈러스 (26)로부터 차감되고, 결과는 문자 AZ로 다시 변환된다.
도전
당신의 도전은 일회용 패드를 암호화하고 해독 할 수있는 가장 짧은 프로그램을 작성하는 것입니다.
첫 번째 입력 행 (STDIN으로)에는 "ENCRYPT"또는 "DECRYPT"라는 단어가 있습니다.
단어가 암호화 된 경우 다음 줄은 일반 텍스트입니다. 프로그램은 두 줄 (STDOUT에)을 출력해야합니다. 첫 번째는 키이고 두 번째는 암호문입니다.
단어의 암호가 해독되면 프로그램에서 두 줄을 더 입력합니다. 첫 번째 줄은 키가되고 두 번째 줄은 암호문이됩니다. 프로그램은 해독 된 평문이 될 한 줄을 출력해야합니다.
평문, 암호문 및 키는 항상 대문자 AZ로 구성되어야합니다. 그것들은 항상 한 줄이며 공백을 포함하지 않습니다.
키는 항상 임의적이어야합니다. 런 사이에 큰 부분을 반복해서는 안되며 텍스트에서 찾을 수있는 패턴이 없어야합니다.
두 가지 간단한 예 :
ENCRYPT
HAPPYBIRTHDAY
>ABKJAQLRJESMG
>HBZYYRTICLVME
DECRYPT
ABKJAQLRJESMG
HBZYYRTICLVME
>HAPPYBIRTHDAY
는 >
당신이 출력으로 그 기호를 인쇄하지 않아도, 출력되는 라인이다.
/dev/random
, haveged
)가 제공된 경우 , ord를 바이트로 xoring하여 암호화하고 키로 xoring하여 해독하십시오. gist.github.com/5078264 stdin 에서 키 또는 임의성을 읽을 수 있으며 메시지 또는 암호문은 파일 이름 인수 일 수 있습니다.
/dev/hwrng
의사 난수를 사용하는 대신 (기술적으로 고장난) 대신에 무작위로 무작위 소스를 사용한다면 보너스를주지 않겠습니까?