25-05-2016, 19:57
Dette er de to stykker kode jeg brugte til Maj 2016 - Cracking XOR Kryptering
Det første script brugte jeg til at kryptere med. Man kunne gøre en del mere, end der er gjort, men det skulle også være til at løse. Det sværeste var at finde en key der tillod resultatet at være valid tekst. Altså tegn der kunne skrives på skærmen. Den krypterede tekst skulle jo stå i udfordringen. :) Jeg kunne selvfølgelig have lavet noget encoding, men dovenskab længe leve. :) Teksten og scriptets 8 bit key er ændret.
Det kan godt være jeg poster det her et par dage for tidligt, men tror ikke der kommer flere løsningsforslag til denne udfordring.
Det første script brugte jeg til at kryptere med. Man kunne gøre en del mere, end der er gjort, men det skulle også være til at løse. Det sværeste var at finde en key der tillod resultatet at være valid tekst. Altså tegn der kunne skrives på skærmen. Den krypterede tekst skulle jo stå i udfordringen. :) Jeg kunne selvfølgelig have lavet noget encoding, men dovenskab længe leve. :) Teksten og scriptets 8 bit key er ændret.
#!/usr/bin/env ruby
text = 'En eller anden tekst'
key = 0b00000111
puts "String: #{text}"
puts "Size: #{text.size}"
text.each_char do |char|
temp = char.unpack('C*')
xored = temp[0] ^ key
print xored.chr
end
Her er så mit løsningsforslag til udfordringen, hvor jeg forsøger at dekryptere teksten med alle keys i tilhørende keyspace: Jeg ved jeg har fundet koden, hvis den streng jeg søger efter, findes i den dekrypterede string.#!/usr/bin/env ruby
code = 'Noget krypteret tekst fra ovenstående script'
0.upto(255) do |key| # Prøv alle keys - fra 0 til 255
decrypted = ""
puts "Trying key: #{key}"
code.each_char do |char| # xor hele den krypterede string
temp = char.unpack('C*')
xored = temp[0] ^ key
decrypted += xored.chr
end
if decrypted.include? 'figure' # Se efter om søgeordet findes når den krypterede string er xored med aktuelle key
puts "Keys is: #{key}" # Udskriv key på skærmen
puts "Code is: #{decrypted}" # Udskriv dekrypterede tekst på skærmen
end
break if decrypted.include? 'figure' # Søgeordet er fundet, så vi behøver ikke teste flere keys
end
Teksten er selvfølgelig ændret. Koden kunne også gøres mindre, men man kan bruge det eller lade være. :)Det kan godt være jeg poster det her et par dage for tidligt, men tror ikke der kommer flere løsningsforslag til denne udfordring.