다음과 같은 최상의 솔루션을 만들기 위해 문제가 있습니다. [0 ... N] 범위의 유한 음수가 아닌 정수가 있습니다. 이 집합의 각 숫자를 문자열로 표현하고 이러한 문자열을 원래 숫자로 역으로 변환 할 수 있어야합니다. 따라서 이것은 전체적인 기능이어야합니다.Bijective "Integer <-> String"function
추가 요구 사항은 다음과 같습니다 다수의
- String 표현은 적어도 어느 정도 원래의 수를 당황하게한다. f (x) = x.toString()과 같은 원시 솔루션은 작동하지 않습니다.
- 문자열 길이는 중요합니다.
- K의 문자열 표현을 알고있는 경우, K + 1의 문자열 표현을 추측하는 것이 중요합니다 (어느 정도까지).
p.p.2의 경우 분명한 해결책은 Base64 (또는 모든 값에 맞는 BaseXXX) 표기법을 사용하는 것입니다. 그러나 최소한의 추가 노력으로 p.3에 적합 할 수 있습니까? 상식은 BaseXXX 값에 대한 전체적인 "String < -> String"함수가 추가적으로 필요하다는 것을 알려줍니다. 어떤 제안? 아니면 3 가지 요구 사항을 모두 충족시키기 위해 BaseXXX보다 나은 점이 있습니까?
오른쪽의 '관련'목록에는 여러 가지 유사한 질문이 있습니다. – AakashM
정의에 따르면, 가역적 인 난독 화 함수는 "암호"입니다. 'enc (k)'에서'enc (k + 1)'을 계산할 수 없다는 것은 좋은 암호에 꽤 많이 필요합니다. 만약 당신이 알고 있다면 평문/암호 쌍은 당신에게 평문 근처의 많은 암호문을 줄 것입니다. 당신은 계산할 시간이있었습니다. 그런 질문은 소금을 사용할지 여부와 상관없이 짧은 암호문을 얻기 위해 받아 들일 수있는 암호가 "나쁘다"(또는 값 비싼 계산 방법) 방법이며, 스트리밍 모드. –
스트리밍 모드는 중요하고 중요하지 않습니다. 왜냐하면 암호로 인해 단일 숫자의 표현을 뒤집을 수 없더라도 일련의 긴 숫자를 볼 수 있고 일반 텍스트 데이터의 유포 분포에 대해 조금은 알고있는 공격자 특정 공통 평문 값의 암호화 된 값을 식별하기 위해 주파수 분석, 마르코프 연쇄 분석 등을 수행 할 수 있습니다. 스트리밍 모드가 실패한 예는 http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29를 참조하십시오. –