2015-01-13 4 views
0

텍스트를 암호화하고 출력을 일반적인 영어/스페인어 텍스트 또는 유사한 방식으로 암호화하고 해독 할 수 있습니까? 영어 텍스트와 같은 암호화 된 텍스트

는 I는 시저 암호화를 http://en.wikipedia.org/wiki/Caesar_cipher

Plaintext: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG  
Ciphertext: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD 

시도하지만, 예를 들면, 출력하려는 ​​:

Plaintext: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG  
Ciphertext: RADIO LIBRARY MAKE TABLE TIME ON KITCHEN DAY OF 

답변

0

물론 이것은 특별히 제작 한 번 패드 수있다. 일반 텍스트와 대상 암호 텍스트를 XOR하면 키가 생깁니다. key.length = max(pt.length, ct.length) 이것은 분명히 하나의 PT, CT 쌍에 대해서만 작동합니다.

0

가능한 해결책은 다음과 같습니다. 배열에 영어 또는 스페인어 사전을 사용하는 데 성능 문제가있을 수 있지만 일반적인 단어 만 필요할 수 있습니다.

function wordSwap(String str){ 
    var dictionary = Array(a, the, brown, fox, over, ...); 
    var swapDictionary = randomizeArray(dictionary); 
    var newStr = ""; 

    str = str.split(' '); 
    foreach(str as s){ 
     var idx = dictionary.indexOf(s); 
     newStr += swapDictionary[idx]+" "; 
    } 

    return newStr; 
} 
0

잭의 대답은 매우 간단하고 시저 카퍼 암호와 잘 일치하지만 매우 안전하지는 않습니다. 그것은 훨씬 더 큰 "알파벳"을 가진 대체 암호 일뿐입니다. Caesar Cipher와 마찬가지로 주파수 분석을 사용하여 깨질 수 있습니다. THE와 AND라는 단어는 영어로 매우 일반적입니다. ÉL과 LA는 스페인어로 매우 일반적입니다. 그래서 저는 암호문에 매우 일반적으로 나타나는 "단어"를 찾고 대상 언어의 일반적인 단어에 매핑한다고 가정합니다. 나는 메시지의 일부 (또는 전체 메시지)를 다룰 때까지 주파수와 컨텍스트를 기반으로 추측을 계속한다. 이것이 아마도 푸들에 관한 것이라면 메시지에 자주 등장하는 일요일을 보았을 것입니다. 어쩌면 저는 일요일이 푸들이고 그곳에서 일한다고 추측 할 수 있습니다.

나는 단순하기를 좋아하지만 보안을 원한다면 너무 좋아하지 않습니다.

암호화 체계를 유지하는 형식을 고안 할 수는 있지만 여기서는 원하는대로 할 수 있지만 큰 도메인에서 작동하도록 설계된 것은 익숙하지 않습니다 (또는 조사 할 수있는 영역입니다. http://crypto.stackexchange.com에 물어보십시오.이 질문에 더 좋은 장소가 될 것입니다.) 암호화를 보존하는 형식의 이점은 결과 메시지가 원본 메시지와 동일한 크기 여야한다는 것입니다.

그러나 우리가 사용할 수있는 또 다른 솔루션은 base-N 인코딩의 일종으로 N은 사전의 크기입니다.

주문한 사전과 평문으로 시작하십시오. 사전에서 각 단어를 찾아 색인을 기록하십시오. 이러한 색인을 사용하여 단어 크기가 사전의 요소 수를 기반으로하는 새 메시지를 만듭니다. 단순화를 위해 용어 당 64 비트까지 반올림 할 수 있지만 더 많은 비트 연산을 수행하고 바이트 경계를 넘어 데이터를 유출하게 만들려면 각 용어를 임의의 비트 수로 만들 수 있습니다. 원하는 경우 해당 메시지를 암호화하십시오 (예 : AES).

이제이를 다시 단어로 인코딩해야합니다. N-1보다 작은 값의 경우 사전에서 해당 단어를 선택하기 만하면됩니다. N-1 이상의 숫자의 경우, 사전의 마지막 단어를 표식으로 사용하고 그 다음 단어를 표제에 추가 할 수 있습니다. 그래서 A부터 ZYRIAN까지 1000 단어 사전 (0..999)이 있다고 가정 해보십시오. 우리는 999을 ZYRIAN A로, 1000을 ZYRIAN AARDVARK로 인코딩 할 수 있습니다. 더 큰 숫자를 인코딩해야한다면 우리는 연결될 수 있습니다. 예를 들어, ZYRIAN ZYRIAN A는 1998입니다. 물론 바이트 경계를 넘어서 데이터를 분리하게되면 더 나은 출력 크기를 얻을 수 있습니다. 값은 2 * N보다 크지 않습니다.

여기서 핵심은 문제를 두 가지 문제, 즉 임의의 단어와 숫자로 변환 할 수있는 트랜스 코더, 그리고 모든 표준 암호화 체계를 사용하여 수행 할 수있는 암호화로 나눈 것입니다.

관련 문제