문제

문제는 현대의 관리되지 않은 언어에 대한 것입니다 .C와 같은 언어, 델파이 등.

다른 암호화 알고리즘을 만들고 싶습니다. 다른 사람들과 달리 암호화 된 문자열의 길이를 줄입니다.

나의 첫 번째 생각은 16 진수에 비슷하지만 더 많은 문자를 가진 나만의 번호 시스템을 만드는 것이 었습니다. 예를 들어 [0..9] + [a..z]. '!,./?) (#!'등과 같은 다른 숫자를 추가하십시오.

내 질문은 A에서 Z까지 0에서 9까지 이러한 숫자 시스템을 구현하는 방법입니다. 모든 단일 값을 0xzzzzzzzz까지 상수로 선언해야합니까? 그것은 내 인생을 끔찍하게 만들 것입니다

귀하의 제안, 예를 알려주세요. :)

도움이 되었습니까?

해결책

이것에 대해 생각합시다.

각베이스 40 문자는 8 비트를 차지합니다. 그것은 0에서 39까지의 숫자를 인코딩하는데, 이는 단지 5 비트의 실제 정보보다 머리카락 일뿐입니다.

단일 바이트는 256 개의 다른 값을 나타낼 수 있습니다. 베이스 40 인코딩은 동일한 바이트에서 40 가지 값 만 나타냅니다.

이것은 그물 인 것 같습니다 손실 바이트 당 2-3 비트의 인코딩.

그러나 기본 40 값은 문자열이며 더 이상 아무것도 아닙니다. 멋진 데이터베이스 선언이 필요하지 않습니다. 단지 문자열 일뿐입니다.

Base40 현을 일반 문자열로 변환하기 위해 Tobase40 (sombytes)과 Tobytes (somebase40string)의 두 가지 기능을 작성합니다.

잘 익은 기존 솔루션을 원한다면 연구 베이스 64.

다른 팁

컴퓨터와 스토리지의 작동 방식을 변경해야합니다.

무료 메모리가 없으며 무료로 공간을 얻는 방법이 없습니다. 숫자 시스템을 변경하면 종이에 글을 쓸 때 더 많은 공간을 제공하지만 컴퓨터 메모리에는 여전히 같은 양의 비트가 필요합니다.

또한 무언가를 암호화하려면 암호화 된 콘텐츠가 가능한 한 무작위로 이루어져야하므로 해당 작업이 의미있는 압축을 방지합니다.

일반적으로 일부 양식 압축은 암호화 (GZIP 또는 유사한 것) 전에 수행되지만 숫자 시스템을 변경하여 작동하지 않습니다.

PS는 입증 된 암호화 알고리즘을 사용합니다.

일반적으로 암호화 알고리즘이 암호화 된 텍스트의 크기를 줄이는 방식은 먼저 범용 압축 알고리즘을 통해 텍스트를 실행 한 다음 압축 결과를 암호화하는 것입니다. 두 알고리즘을 하나로 결합하는 것보다 거의 항상 더 나은 결과를 얻을 수 있습니다.

암호화 알고리즘을 개발 한 사람들은 아마도 수백만 시간의 남자 시간, 몇 년 동안 대학원과 박사후 학위를 받기 위해 시간을 보냈습니다. 더 나은 것을 생각해 낼 수 있다고 생각하는 이유는 무엇입니까?

당신은 아마도 안전하지 않은 알고리즘을 생각해 낼 것입니다.

기존 알고리즘을 사용하고 압축을 사용하십시오.

암호화하기 전에 입력 (GZIP, Zlib 등을 사용하여)을 압축하는 것이 좋습니다. 이것은 자신의 알고리즘을 만드는 것보다 쉽고 안전합니다. (예를 들어 gnupg는 이것을합니다.)

Base64 문자열은 많은 컴퓨터 언어에서 일반적이며 꽤 표준입니다. 다음 문자를 사용합니다.

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/

보다 http://en.wikipedia.org/wiki/base64 자세한 내용은

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top