Đảo ngược Hash với MS Excel


0

Tôi đã xem một video trên YouTube có tên ' Câu đố giấy A4 'trong đó người thuyết trình lấy một tờ giấy A4 và gấp nó theo một cách nhất định và sau đó yêu cầu người xem tính chu vi, nhưng không đưa ra giải pháp, thay vào đó đưa ra phương pháp kiểm tra xem bạn có câu trả lời đúng bằng Hash không.

Trình tự để biết câu trả lời đúng là = Lấy câu trả lời của bạn và trên máy tính nhấp vào sq rt 5 lần, sau đó từ kết quả, hãy lấy 6 chữ số ở bên phải dấu thập phân và sắp xếp lại chúng theo thứ tự tăng dần theo số và nếu chúng bằng 234477 bạn có câu trả lời đúng.

Vì vậy, thay vì cố gắng tính chu vi tôi muốn đảo ngược hàm băm để đi đến giải pháp. Vì vậy, tôi đã kích hoạt Excel và trong A5 tôi đã nhập số ứng cử viên (giả sử là 42) và sau đó trong B5 đến F5, tôi bắt đầu root vuông. Trong G5 tôi đã trừ đi 1 để đưa cho tôi 0,123897073 mà ở H5 tôi đã nhân 1 triệu để cho tôi 123897, sau đó trong I5: I10 tôi đã trích xuất từng số. Trong J5: J10, tôi đã sắp xếp các số bằng công thức nên J5-1, J6 = 2, J7 = 3, J8 = 7, J9 = 8, J10 = 9, cuối cùng trong K5 tôi đã ghép tất cả các số để đưa cho tôi 123789 và đặt mục tiêu 234477 trong L5.

Bây giờ đây là nơi tôi bị mắc kẹt Tôi giả sử tôi có thể sử dụng Mục tiêu tìm kiếm để đặt K5 bằng với 234477 bằng cách thay đổi A5 nhưng nó sẽ không tìm ra giải pháp.

Tôi không muốn sử dụng mã / macro để tìm câu trả lời hoặc các thao tác thủ công như sắp xếp, v.v., tôi thích ý tưởng xem Mục tiêu tìm kiếm đi qua và thử các giải pháp và có thể 'nhìn thấy' đường dẫn đến giải pháp.

Có ai biết làm thế nào tôi có thể hoàn thành điều này?

Công thức
A5 = Số đầu vào của người dùng
B5 = SQRT (A5)
C5 = SQRT (B5)
D5 = SQRT (C5)
E5 = SQRT (D5)
F5 = SQRT (E5)
G5 = F5-1
H5 = IF (TRUNG (G5,3,1) * 1 = 0, G5 * 10000000, G5 * 1000000)
(DANH SÁCH) I5: I10 = MID ($ F $ 5,3,1) * 1 [Tăng 3 mỗi 1 mỗi hàng)
J5: J10 {= INDEX (danh sách, MATCH (NHỎ (COUNTIF (danh sách, "& lt;" & amp; list), ROW (1: 1)), COUNTIF (danh sách, "& lt;" & amp; list), 0)) }
K5 = J5 & amp; J6 & amp; J7 & amp; J8 & amp; J9 & amp; J10

enter image description here

EDIT: Có lẽ tôi không nên sử dụng Goal Seek, nó có thể có những hạn chế, ngay cả khi tôi nhập mục tiêu 123789, nó vẫn không thể tìm thấy giá trị bắt đầu là 42.

Câu trả lời:


0

Nói chung, bạn nên cố gắng tìm một thuật toán hợp lệ không chỉ cho giải pháp của bạn.
Cố gắng thậm chí để tăng tốc tính toán như bạn có thể.

Wrong solution

  • A5 Nó sẽ giữ giá trị ban đầu của bạn
  • B5 =A5^(1/32), vâng một chút về toán học
    (SQRT (x) tương đương với x ^ 1/2; thực hiện năm lần có nghĩa là 1/2 * 1/2 * .... = 1/32)
  • C5 =Mod(B5,1)
    Ở đây bạn không thể đơn giản làm 1-x: hãy tưởng tượng nếu đó là 2.smth hoặc 0. thứ ...

    Hàm MOD trả về phần còn lại sau khi một số được chia cho một ước số ..

  • D5 =3-TRUNC(LOG(C5,10))
    Bạn cần lấy các chữ số đầu tiên khác 0 (Nhật ký hàm 10 ) và bỏ qua 0. của chuỗi.
  • E5 =MID(C5,D5,6) Ở đây bạn trích xuất chuỗi.
  • F5:F10 Các chỉ mục đơn giản cho các chức năng cột tiếp theo.
  • G5 =0+MID($E$5,F5,1) nó trích xuất chữ số trong F5. Sao chép & amp; Dán vào G5:G10.
  • H5 =LARGE($G$5:$G$10,7-F5) Lấy 7-F5 thứ lớn nhất trong phạm vi G5:G10 . Sao chép & amp; Dán vào H5:H10.
  • I5 =H5&H6&H7&H8&H9&H10 Soạn lại chuỗi
  • J5 Nó sẽ giữ giải pháp HASH để tìm (bạn gọi nó là Mục tiêu )
  • K5 =I5=MID(J5,1,6) So sánh chuỗi trong I5 từ J5.

Dưới đây là giải pháp:

enter image description here

Đây là mã bash cho SHA256

Đây là mã bash cho SHA256
StartSeq = 1; Kết thúc = 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

Điều này có sử dụng mục tiêu tìm kiếm? Bởi vì nó không làm việc cho tôi.
Raystafarian

Tôi không có MS eXcel với tôi. Tôi đã làm với bảng tính google. Nếu bạn đặt một số trong A5, nó sẽ kiểm tra xem nó có đúng không trong K5. Tôi nghĩ bạn có thể sử dụng mục tiêu tìm kiếm trên nó.
Hastur

Video đối với tôi giống như bạn cần loại trừ tất cả các chữ số 0 từ E5
Raystafarian

Ah có nó để sử dụng mục tiêu tìm kiếm. Cảm ơn!
Raystafarian

@Raystafarian Có, tính toán trong D5 từ nơi bắt đầu (nó cắt tất cả các số 0 sau điểm ... bằng cách sử dụng Nhật ký trong cơ sở 10 ... Log_10 (0.1) = -1, Log_10 (0.01) = -2 ...)
Hastur

0

Cảm ơn Tôi đã tìm ra cách để Goal Seek hoạt động. Nó đã tìm thấy hai giải pháp cho tôi cho đến nay -

4 và 2340.

Được rồi, vì vậy ở đây chúng tôi đi dựa trên Câu trả lời của Hastur

Một lần nữa chúng ta sẽ bắt đầu A5

  • A5 = bất kỳ số nào
  • 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 đến G10 là chỉ số 1,2,3,4,5,6 - chúng không bao giờ thay đổi
  • H5 đến H10 =INT(0+MID($F$5,$G5,1)) kéo xuống như vậy $G5 tăng lên 6, 7, v.v.
  • I5 đến I10 =SMALL($H$5:$H$10,ROW(A1)) kéo xuống như vậy Row(A1) tăng
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

Bây giờ bạn có thể tìm kiếm mục tiêu J5 đến 234477 bằng cách thay đổi A5

enter image description here


Dung dịch

enter image description here

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.