Reverse Hash com o MS Excel

0

Eu estava assistindo a um vídeo no YouTube chamado ' O quebra-cabeça de papel A4 ' nele o apresentador pega uma folha de papel A4 e dobra de uma certa maneira e, em seguida, pede aos espectadores para calcular o perímetro, mas não dá a solução, em vez disso, dá um método de verificar se você tem a resposta certa usando um Hash.

A sequência para saber a resposta correta é = Pegue sua resposta e, em uma calculadora, clique em sq rt 5 vezes e, a partir do resultado, pegue os 6 dígitos à direita da vírgula decimal e reorganize-os em ordem numérica crescente. e se eles são iguais a 234477, você tem a resposta certa.

Então, ao invés de tentar calcular o perímetro, eu queria reverter o hash para chegar à solução. Então eu liguei o Excel e em A5 eu digitei o número do candidato (digamos 42) e depois no B5 para F5 eu comecei o root quadrado. No G5 eu subtrai 1 para me dar 0.123897073 que em H5 eu multipliquei por 1 milhão para me dar 123897, então em I5: I10 eu extraí cada um dos números. Em J5: J10 eu classifiquei os números usando uma fórmula assim J5-1, J6 = 2, J7 = 3, J8 = 7, J9 = 8, J10 = 9, então finalmente em K5 eu concatenei todos os números para me dar 123789 e colocou o alvo 234477 em L5.

Agora aqui é onde eu estou preso, eu assumi que eu poderia usar o Goal Seek para definir o K5 como igual a 234477 mudando o A5, mas ele não encontrará uma solução.

Eu não quero usar código / macro para encontrar a resposta ou operações manuais, como ordenar etc, gostei da ideia de ver o objetivo da busca passar e tentar soluções e ser capaz de "ver" o caminho para a solução .

Alguém sabe como posso concluir isso?

Fórmulas
A5 = Número de entrada do usuário
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)
(LISTA) I5: I10 = MID ($ F $ 5,3,1) * 1 [Incrementar 3 por 1 por linha)
J5: J10 {= ÍNDICE (lista, CORRESPONDÊNCIA (SMALL (COUNTIF (lista, "<" & lista), ROW (1: 1)), COUNTIF (lista, "<" & lista), 0)) }
K5 = J5 & J6 & J7 & J8 & J9 & J10

EDIT: Talvez eu não deva usar o Goal Seek, ele pode ter limitações, mesmo se eu inserir o alvo 123789 ele ainda não conseguirá encontrar o valor inicial de 42.

    
por Naz 26.01.2016 / 18:18

2 respostas

0

Em geral, você deve tentar encontrar um algoritmo válido não apenas para a sua solução.
Tente acelerar o cálculo como você pode.

  • A5Manteráseuvalorinicial
  • B5=A5^(1/32),simumpoucodematemática(SQRT(x)equivaleax^1/2;façacincovezessignifica1/2*1/2*....=1/32)
  • C5=Mod(B5,1)
    Aquivocênãopodesimplesmentefazer1-x:imaginesefoi2.smthou0.smth...

    TheMODfunctionreturnstheremainderafteranumberisdividedbyadivisor..

  • D5=3-TRUNC(LOG(C5,10))
    Vocêprecisaterosprimeirosdígitosdiferentesdezero(funçãoLog10)epularo0.dastring.
  • E5=MID(C5,D5,6)Aquivocêextraiastring.
  • F5:F10Índicessimplesparaaspróximasfunçõesdacoluna.
  • G5=0+MID($E$5,F5,1)extraiodígitoemF5.CopieecoleemG5:G10.
  • H5=LARGE($G$5:$G$10,7-F5)Pegueo7-F5thmaiordointervaloG5:G10.CopieecoleemH5:H10.
  • I5=H5&H6&H7&H8&H9&H10Componhaastringnovamente
  • J5ManteráasoluçãoHASHparaencontrar(vocêachamouTarget)
  • K5=I5=MID(J5,1,6)CompareasequênciaemI5edeJ5.

Aquiabaixoasolução:

enter image description here

Aqui um código bash para SHA256

Here a bash code for SHA256
StartSeq=1 ; EndSeq=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
    
por 28.01.2016 / 11:50
0

Graças ao Hastur encontrei uma maneira de o Goal Seek trabalhar. Encontrou duas soluções para mim até agora -

4 and 2340.

Tudo bem, então vamos lá com base na resposta de Hastur

Mais uma vez, começaremos em A5

  • A5 = qualquer número
  • 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 a G10 são índice 1,2,3,4,5,6 - nunca mudam
  • H5 a H10 =INT(0+MID($F$5,$G5,1)) arrastado para baixo, de modo que $G5 aumente para 6, 7, etc.
  • I5 a I10 =SMALL($H$5:$H$10,ROW(A1)) arrastado para baixo de forma que Row(A1) aumente
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

Agora você pode buscar metas em J5 para 234477 mudando A5

Solução

enter image description here

    
por 28.01.2016 / 14:07