alea = 'QUxFQSD4A7SPYPK/qZVDzskNohowqhLukG6ZyBfIx5/1FZf+DpqynvulXaQ7oHIFrhU='.unpack('m').first[5,45] chal = 'Q0hBTExFTkdFII/JtptN9pii+JcTxjNk/jU='.unpack('m').first[10, 16] pad = "\x7A\x61\x65\x28\x27\x5F\x5D\x66\x34\x60\x23\x63\x38\x34\x67" user = "alice\n" if false user = "alice\n" alea = "012345678901234567890123456789012345678901234" foochal = "V^J]\\@}\004\035cjgvmX\024" pass = "testicule" bla = user + alea + pass bla.reverse! bla += pad[0..3] chal = bla[0..15] 16.times { |i| chal[i] ^= bla[16+i] ^ bla[32+i] ^ bla[48+i] } end bla = (user + alea).reverse + pad (5..13).each { |passlen| foo = chal[0..passlen] + bla 16.times { |i| foo[i] ^= foo[16+i] ^ foo[32+i] ^ foo[48+i] } p foo[0..passlen].reverse }