MS Excel을 사용한 역방향 해시

MS Excel을 사용한 역방향 해시

유튜브에서 ''라는 제목의 영상을 보고 있었는데A4 종이 퍼즐'라는 내용에서 진행자는 A4 용지를 일정한 방향으로 접은 후 시청자에게 둘레를 계산하도록 요청하지만 정답을 제시하지는 않고 대신 해시를 사용하여 정답이 있는지 확인하는 방법을 제공합니다.

정답을 아는 순서는 다음과 같습니다. 답을 구하고 계산기에서 sq rt를 5번 클릭한 다음 결과에서 소수점 오른쪽 6자리를 가져와 숫자 오름차순으로 다시 정렬하면 234477과 같습니다. 정답이 있습니다.

그래서 둘레를 계산하려고 하기보다는 해시를 뒤집어서 해결책을 찾고 싶었습니다. 그래서 Excel을 실행하고 A5에 후보 번호(예: 42)를 입력한 다음 B5에서 F5까지 제곱근을 시작했습니다. G5에서는 1을 빼서 0.123897073을 얻었고 H5에서는 1백만을 곱해 123897을 얻은 다음 I5:I10에서 각 숫자를 추출했습니다. J5:J10에서는 수식을 사용하여 J5-1, J6=2,J7=3,J8=7,J9=8,J10=9로 숫자를 정렬한 다음 마지막으로 K5에서 모든 숫자를 연결하여 123789를 얻었습니다. L5에 타겟 234477을 배치했습니다.

이제 여기서 막혔습니다. A5를 변경하여 Goal Seek을 사용하여 K5를 234477과 동일하게 설정할 수 있다고 가정했지만 해결책을 찾지 못했습니다.

나는 답을 찾기 위해 코드/매크로를 사용하거나 정렬 등과 ​​같은 수동 작업을 사용하고 싶지 않습니다. 목표 탐색이 진행되는 것을 보고 솔루션을 시도하고 솔루션의 경로를 '볼' 수 있다는 아이디어가 마음에 들었습니다.

내가 어떻게 완료할 수 있는지 아는 사람 있나요?

공식
A5 = 사용자 입력 번호
B5 = SQRT(A5)
C5 = SQRT(B5)
D5 = SQRT(C5)
E5 = SQRT(D5)
F5 = SQRT(E5)
G5 = F5-1
H5 = IF(MID(G5,3) ,1)*1=0,G5*10000000,G5*1000000)
(LIST)I5:I10 = MID($F$5,3,1)*1 [행당 3씩 1씩 증가)
J5:J10 { = INDEX( list, MATCH(SMALL(COUNTIF(list, "<"&list), ROW(1:1)), COUNTIF(list, "<"&list), 0))}
K5 = J5&J6&J7&J8&J9&J10

여기에 이미지 설명을 입력하세요

편집: Goal Seek를 사용하면 안 됩니다. 제한이 있을 수 있습니다. 대상 123789를 입력하더라도 여전히 시작 값 42를 찾을 수 없습니다.

답변1

일반적으로 솔루션에만 유효한 알고리즘이 아닌 다른 알고리즘을 찾으려고 노력해야 합니다.
가능한 한 계산 속도를 높이십시오.

잘못된 해결책

  • A5초기 값을 유지합니다
  • B5 =A5^(1/32), 예 약간의 수학
    (SQRT(x)은 x^1/2와 동일합니다. 5번 수행하면 1/2*1/2*.... = 1/32를 의미합니다)
  • C5 =Mod(B5,1)
    여기서는 간단히 할 수 없습니다 1-x. 2.smth인지 0.smth인지 상상해 보세요...

    MOD 함수는 숫자를 제수로 나눈 나머지를 반환합니다.

  • D5 =3-TRUNC(LOG(C5,10))
    0이 아닌 첫 번째 숫자(함수 Log 10 ) 를 취하고 0.문자열을 건너뛰어야 합니다.
  • E5 =MID(C5,D5,6)여기서 문자열을 추출합니다.
  • F5:F10다음 열 함수에 대한 단순 인덱스입니다.
  • G5 =0+MID($E$5,F5,1) F5에서 숫자를 추출합니다. 에 복사하여 붙여넣으세요 G5:G10.
  • H5 =LARGE($G$5:$G$10,7-F5)범위에서 7-F5번째 로 큰 값을 가져옵니다 G5:G10. 에 복사하여 붙여넣으세요 H5:H10.
  • I5 =H5&H6&H7&H8&H9&H10문자열을 다시 작성하세요.
  • J5HASH 솔루션을 계속해서 찾을 것입니다(당신이 그것을 호출했습니다).표적)
  • K5 =I5=MID(J5,1,6)문자열을 비교 I5하고~에서 J5.

해결책은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

SHA256에 대한 bash 코드는 다음과 같습니다.


SHA256 StartSeq=1 에 대한 bash 코드는 다음과 같습니다 . 종료순서=5

for i in $(seq $StartSeq $EndSeq) ;
 do 
   [[ $(printf "$i" | sha256sum | awk '{print $1}'| xxd -r -p | base64) \
   == "SyJ3d9TdH8Ycb4hPSGQdArTRIdP9Moywi1Ux/Kzav4o=" ]] && \
   echo "### The Solution is "$i ; 
done

답변2

Hastur 덕분에Goal Seek이 작동하는 방법을 찾았습니다. 지금까지 두 가지 해결책을 찾았습니다.

4와 2340.

좋습니다. 이제 다음을 기반으로 하겠습니다.하스터의 답변

다시 시작하겠습니다.A5

  • A5= 임의의 숫자
  • B5 =INT(A5)
  • C5 =B5^(1/32)
  • D5 =INT(MID(C5,FIND(".",C5,1)+1,10))
  • E5 =INT(IFERROR(IF(FIND("0",D5,1)<6,CONCATENATE(LEFT(D5,FIND("0",D5,1)-1),MID(D5,FIND("0",D5,1)+1,10-FIND("0",D5,1)))),LEFT(D5,6)))
  • F5 =INT(IFERROR(IF(FIND("0",E5,1)<=6,CONCATENATE(LEFT(E5,FIND("0",E5,1)-1),MID(E5,FIND("0",E5,1)+1,7-FIND("0",E5,1))),LEFT(E5,6)),LEFT(E5,6)))
  • G5~G10인덱스는 1,2,3,4,5,6입니다. 절대 변하지 않습니다.
  • H5~H10 =INT(0+MID($F$5,$G5,1))아래로 드래그하면 $G56, 7 등으로 증가합니다.
  • I5 ~ I10 =SMALL($H$5:$H$10,ROW(A1))아래로 드래그하면 Row(A1)증가합니다.
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

이제 목표 탐색을 할 수 있습니다J5에게234477변경하여A5

여기에 이미지 설명을 입력하세요


해결책

여기에 이미지 설명을 입력하세요

관련 정보