Hash reverso com MS Excel

Hash reverso com MS Excel

Eu estava assistindo 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 depois pede aos espectadores que calculem o perímetro, mas não dá a solução, em vez disso dá um método para 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 5 vezes em sq rt, depois do resultado pegue os 6 dígitos do lado direito da vírgula decimal e reorganize-os em ordem numérica crescente e se eles igual a 234477 você tem a resposta certa.

Então, em vez de tentar calcular o perímetro, eu queria reverter o hash para chegar à solução. Então abri o Excel e em A5 digitei o número do candidato (digamos 42) e depois de B5 a F5 comecei a fazer a raiz quadrada. Em G5 subtraí 1 para obter 0,123897073, que em H5 multipliquei por 1 milhão para obter 123897, depois em I5:I10 extraí cada um dos números. Em J5:J10 classifiquei os números usando uma fórmula então J5-1, J6=2,J7=3,J8=7,J9=8,J10=9, e finalmente em K5 concatenei todos os números para me dar 123789 e colocou o alvo 234477 em L5.

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

Não quero usar código/macro para encontrar a resposta ou operações manuais como classificação, etc. Gostei da ideia de observar o Atingimento de Meta passar e tentar soluções e poder 'ver' o caminho para a solução.

Alguém sabe como posso completar 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)
(LIST)I5:I10 = MID($F$5,3,1)*1 [Incrementar 3 por 1 por linha)
J5:J10 { = INDEX( lista, MATCH(PEQUENO(CONT.SE(lista, "<"&lista), LINHA(1:1)), CONT.SE(lista, "<"&lista), 0))}
K5 = J5&J6&J7&J8&J9&J10

insira a descrição da imagem aqui

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

Responder1

Em geral você deve tentar encontrar um algoritmo válido não apenas para sua solução.
Tente até acelerar o cálculo possível.

Solução errada

  • A5Isso manterá seu valor inicial
  • B5 =A5^(1/32), sim, um pouco de matemática
    (SQRT(x) é equivalente a x^1/2; fazer isso cinco vezes significa 1/2*1/2*.... = 1/32)
  • C5 =Mod(B5,1)
    Aqui você não pode simplesmente fazer 1-x: imagine se fosse 2.smth ou 0.smth...

    A função MOD retorna o resto depois que um número é dividido por um divisor.

  • D5 =3-TRUNC(LOG(C5,10))
    Você precisa pegar os primeiros dígitos diferentes de zero (função Log 10 ) e pular o 0.da string.
  • E5 =MID(C5,D5,6)Aqui você extrai a string.
  • F5:F10Índices simples para as funções da próxima coluna.
  • G5 =0+MID($E$5,F5,1) ele extrai o dígito em F5. Copie e cole em G5:G10.
  • H5 =LARGE($G$5:$G$10,7-F5) Pegue o 7-F5maior do intervalo G5:G10. Copie e cole em H5:H10.
  • I5 =H5&H6&H7&H8&H9&H10Componha a string novamente
  • J5Ele manterá a solução HASH para encontrar (você a chamouAlvo)
  • K5 =I5=MID(J5,1,6)Compare a string em I5ede J5.

Aqui abaixo a solução:

insira a descrição da imagem aqui

Aqui está um código bash para SHA256

Aqui está um código bash para SHA256
StartSeq=1 ; FimSeq=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

Responder2

Obrigado a HasturEu encontrei uma maneira de o Goal Seek funcionar. Ele encontrou duas soluções para mim até agora -

4 e 2340.

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

Novamente começaremos emA5

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

Agora você pode buscar metasJ5para234477mudandoA5

insira a descrição da imagem aqui


Solução

insira a descrição da imagem aqui

informação relacionada