• Source
    1. require 'digest/sha1'
    2.  
    3. s=%!
    4. C8 EE A8 0F 80 FD 60 E9 00 3F C4 B0 10 2C E7 33
    5. DC 82 1E 6B D3 5B BB FA 8A 48 C2 F0 97 7F A6 C0
    6. 9C 32 15 89 37 51 AA C9 D8 93 9D 86 DA 28 BB 58
    7. A2 6D E2 7F 3A 3B A5 F1 A5 31 89 6C D8 B5 E6 15
    8. BC A4 BC 59 93 CD 68 85 52 48 93 36 B1 F4 5E FA
    9. D1 62 7C 4B C1 A2 E4 98 7F 17 D5 21 37 7F C5 A0
    10. 2C BE 67 4D DC 5A 0B 66 D9 D4 5B 09 58 2F 72 ED
    11. 4F 45 81 36 73 AB 18 DF 51 5C 1A D3 7F 2E EF B8
    12. D8 C8 C0 8A 4C BA 87 23 01 44 46 E7 03 42 EF 44
    13. EA 05 36 11 3C 03 67 24 A4 BC 53 EF 6E 2D C3 66
    14. B9 CF 9C C2 55 04 9C F8 F4 99 B8 AF FF EA 16 7D
    15. AA EC FF 7D E2 52 8B B7 65 EE 2C 69 07 1D D9 14
    16. C5 5A 6B 5A BC EF 34 12 C4 0D 7D 4E AA DD 19 0A
    17. 2B 5F 8B CE 06 2D A0 6C 76 49 E2 62 AC 4B 04 46
    18. FA E6 58 3E D0 7B 58 F0 8A 9E 67 1B 96 3C B3 93
    19. 94 66 8A 44 50 D5 4F F8 49 33 4E BA CA E1 95 24
    20. 92 43 85 FC A8 B1 66 6F 46 57 BD A5 B3 1E 1B 47
    21. 5B 95 EB E7 8C 41 25 DC 88 9D 66 72 36 6B C1 D8
    22. E8 60 59 BA 1F BD 66 A7 3C A3 1D 08 DE CF EB 02
    23. 10 90 FD 9A F9 51 83 6C 22 79 6F 79 D7 98 52 43
    24. DD 1E 66 AB E1 F0 E2 E4 85 0D 5F E5 B9 83 07 E0
    25. 84 9C B8 3A 60 1E 00 31 8B E9 7B 9B 6E 56 F0 84
    26. 81 A7 AE AE BE B2 56 0A C3 B8 DE B8 5C 8A 09 83
    27. 4C 9F 12 D3 DE C2 08 F2 79 CF 71 51 B3 E5 F0 D2
    28. 47 12 0E DF 98 B2 5C 02 E7 E3 4D B3 6B 20 91 0D
    29. 7C 0E E2 95 2E 7A 29 E2 7C C0 A8 9A B6 25 C1 FB
    30. E5 EB A5 A0 F6 E2 E6 A0 70 4E E5 8F DE 1E 9C 33
    31. 29 2F DA 85 E0 9A C2 F6 6F 71 A9 84 E7 F9 61 29
    32. 50 3A 0A 65 C3 BD 91 CC 7E 52 69 84 12 27 6C 97
    33. 0C 9C FC 60 32 58 7D BD 2E 4F 5A 36 97 ED 34 5A
    34. 35 2F A8 ED DC A0 67 F0 FE 17 C9 E0 6E D6 D1 9D
    35. 58 C2 E0 81 6F C1 7F E9 38 5C EC 5A 30 08 00 CB
    36. C3 65 2F A9 78 6D F5 C0 D1 34 8E 99 C8 52 85 E4
    37. F7 06 FD E7 1B 14 9F 97 BD D9 97 29 18 8A 2A E4
    38. 76 AA 36 2D CE 4E E4 D0 84 69 65 22 0C 9B A4 42
    39. !
    40.  
    41. def find(i,sp)
    42. k = i
    43. digest = Digest::SHA1.new
    44. sp.each{|b|
    45. c = b.to_i(16) ^ k
    46.  
    47. # $><<b + ":" + c.to_s(16) + ","
    48. if (c < 0x9 || c > 0x7f) then
    49. $><<"continue:i=" + i.to_s + ",c=" + c.to_s(16) + "\n"
    50. return
    51. end
    52.  
    53. $><<c.chr
    54. digest << k.chr
    55. s = digest.hexdigest
    56. k = s.to_i(16) % 256
    57. }
    58. return
    59. end
    60.  
    61. sp=s.split("\s")
    62.  
    63. =begin
    64. for i in 0..255 do
    65. find(i,sp)
    66. end
    67. =end
    68.  
    69. find(0xEA,sp)
    70.