2012-10-28 2 views
2

해싱은 파일의 내부 데이터를 읽는 방법을 사용하고 숫자와 문자를 수학적으로 생성합니다. 어떻게 C + +에서 수학 방정식이 무엇입니까?숫자와 문자로 해싱하는 수학

데이터 파일을 읽고 SHA-256 해시 합을 가져 오는 C++ 및 Visual Studio를 사용하여 응용 프로그램을 만들려고합니다. 그런 다음 방정식을 적용하여 숫자와 문자를 다른 숫자로 변경하지만 더 적은 문자로 변경합니다. 이 처리 된 번호와 문자는 7zip 또는 rar 파일의 암호로 사용됩니다. (암호화를 위해 더 잘 만들어 졌는지 확실하지 않음)

콘텐츠에 액세스하는 인터넷 크롤러와 액세스하지 못하도록하는 인터넷 크롤러를 마이그레이션하기위한 것입니다. 나는 그것이 사람을 완전히 잠글 수 있다고 기대하지 않습니다.

또한 변환 가능해야합니다. 따라서 해시에서 패스로, 패스에서 해시로 갈 수 있어야합니다.

아무도 나에게 도움이되지 않는다면, 나는 매우 감사하게 생각하고, 당신의 프로파일이나 원하는 경우 무엇이든간에 당신에게 크레딧 페이지의 장소를 줄 것이다 : 3.

다른 질문이나 정보가 있으면 언제든지 메시지를 보내주십시오. GUI의

사진 :

+2

암호를 생성하기 위해 해시에서 바이트를 제거하는 것은 일방 통행 작업입니다. – hyde

+0

내가 생각할 수있는 방법이 있어야한다. 만일 내가 일방 통행 조작이라도 괜찮다면, 나는 그것에 착수 할 수있다. –

+0

음, 단축 된 해시는 여전히 해시이며 덜 안전합니다. – hyde

답변

1

상당히 필요한 것 같습니다. (이 문제에 대한 우아한 수학적 솔루션을 찾는 것이 재미있을 수도 있지만 실제로는 필요하지 않습니다.) SHA-256은 32 바이트 길이의 배열입니다. 표시되는 문자와 숫자는 배열의 16 진수 표현입니다. 16 진수 숫자는 4 비트의 데이터를 필요로하므로 두 문자 또는 숫자 (또는 문자 및 숫자)의 각 조합은 1 바이트를 나타냅니다. 32 바이트 배열을 나타 내기 위해서는 64 개의 긴 문자열이 필요합니다.

내 지식 WinRar는 177 자의 암호 제한이 있으며 7z는 제한이 없습니다. 이론적으로 원래 64 자 SHA-256 표현을 암호로 사용할 수 있습니다. 생성 된 암호는 16^64 == 2^256 조합이므로 매우 강력합니다.

그러나 암호가 더 짧지 만 Base64 인코딩을 사용하면 더 강력한 암호를 생성 할 수 있습니다 (Wikipedia를 시작하는 것이 좋습니다). Base64를 사용하면 32 바이트 배열을 대문자와 소문자로 구성된 43 자 길이의 암호와 9 자리 및 + 및/문자로 표현할 수 있습니다. 그래서 당신은 64^43> 2^256이됩니다.

쉽게 Base64 문자열을 해시로 변환 할 수 있습니다. 당신은 AES256을 사용하기 때문에 256 비트는 공격자가 단지 암호가 그래서를 사용하여 키와 방치를 공격 할 수있는 경우에는 이후 강력한 암호를 생성하는 사실은 꽤 쓸모의 주요 통지해야한다 : 보조 노트로

SHA-256으로 충분합니다. 그러나 저는 우리가 64 자 긴 암호보다 더 강력한 43 자 긴 암호를 생성 할 수 있다는 사실을 좋아합니다.

그리고 또 다른 측면 노트 : 당신이 사용하는 압축기가 자신의 Base128 인코딩을 설계하고 또한 37

에 문자 수를 낮출 수있는 암호 문자로 받아 문자의 종류에 따라 나는 빠르고, 매우 유능하며, 마지막으로 적어도 오픈 소스이기 때문에 7z를 사용할 것을 제안합니다.

+0

사실, Base64 암호는 여전히 256 비트 해시에서 파생 되었기 때문에 16 진수 암호와 마찬가지로 256 비트의 엔트로피를 유지합니다. 예, 43 * 6 = 258> 256이지만 두 개의 추가 비트는 단순히 0입니다. –

+0

@IlmariKaronen - 왜 맞을지 모르겠지만 암호에 대해서는 실제로 틀린 것입니다. Base64 암호는 테이블을 통해 생성됩니다. 이러한 이유로 인해 생성되는 암호는 같은 비트의 다른 표현이 아닙니다. 344 비트 길이의 새로운 비트 문자열입니다. 그러므로 원래의 해쉬를 공격 해 보지 않으면 그것을 생성하는 데 사용 된 엔트로피가 훨씬 더 커집니다. 암호는 처음에 어떻게 생성되었는지를 알고있는 경우에만 유효합니다. –

+0

base64로 인코딩 된 데이터를 인식하는 것은 매우 쉽습니다. 특히 하나 이상의 샘플이있는 경우 특히 그렇습니다. –

1

당신은 모든 해시를 찾고되지 않습니다. 가역성을 인코딩 된 원본에서 원한다면 암호화를 원할 것입니다. 뭔가를 암호화 할 수있는 방법이 있지만 아주 간단한 방법은 다른 암호를 키로 사용하여 Everpassword's AES 또는 Crypto.org's RC4과 같은 것을 사용하는 것입니다. (정말로 신경 쓰지 않는다면 빈 키를 사용해도 무작위로 인코딩됩니다.) 주요 차이점은 일반적으로 AES는 패딩 (CTR 모드 무시)이 필요하므로 더 긴 결과를 생성합니다 , RC4는 입력이 무엇이든 정확하게 크기를가집니다. 위 링크에서 Bo는 base64 변환으로 확장됩니다.

원래 암호를 가져올 수있는 이유가 무엇인지 이해하지 못합니다. 나는 누군가에게 암호를 줄 수있는 유일한 유스 케이스를 보지 못했고, 호기심을 충족시키기 위해 그것을 생성 한 원래 구문을 잘라내어, 유용한 것을하기 위해 암호화 된 암호를 필요로 할 때만 보았다. 아무도 당신이 그걸 생각 해낸 것에 신경을 쓰지 않을 것이기 때문에 당신은 해쉬의 몇몇 문자를 사용할 수도 있습니다.

또한 해시와 암호는 숫자와 문자를 제공하지 않습니다. 숫자와 문자는 1과 0을 제공합니다. 숫자와 문자는 비교하거나 입력 할 때 시각화하는 편리한 방법입니다. 원시 이진을 매우 쉽게 처리하지 않기 때문입니다. 그러나 가능한 많은 표현이 있습니다.