У меня есть зашифрованная строка (данные)
data = «i] \ rD \ 004 \ 025 \ 027 \ 004_ ~ \ 002 \ 006`HZ @ UBY \ Ku \ 002O2 \003_MQB \ 020 \ 007G ~ \ 004Q ”
и ключ (в шестнадцатеричном формате)
ключ =« 0x7f0b0014 »
простой текст =key xor data
Я пытался расшифровать его в ruby, но ниже мне не удалось найти код одной из моих попыток.
data = "i]\rD\004\025\027\004_~\002\006`HZ@UBY\\Ku\002O2\003_MQB\020\007G~\004Q"
key = "7f0b0014"
# key changed to an array with chars in int stored in new_key
p new_key = [key].pack("H*").split(//).each.map { |x| x.ord }
#pack("H*") used on array GIVES STRING FROM HEX #.each.map change every [value] of an array by value.ord
p new_data = [data].pack("H*").split(//).each.map { |x| x.ord }
nd = Array.new
i,j = 0, 0
while i < new_data.length do
while j < new_key.length do
new_data[i] = new_data[i].to_i ^ new_key[j].to_i
j+=1
end
j=0
nd << new_data[i].chr
i+=1
end
p new_data
p nd.join
#OUTPUT = "M\xBD%\x14\x9EFaP\x8BL.HC\x96\xCBgn*"
Я пытался:
добавить отступ "000 ...." слева от клавиши
добавить отступ ".... 000" справа отkey
зациклить ключ на той же длине, что и данные "7f0b00147f0b0014 ... 7f0b0014"
Вывод должен дать мне какой-то видстрока в формате "1227a5aa-ce82-4da8-9ba6-c49e809ba720".
Вот рабочий код, но ключ здесь был целым числом, а не строкой:
key = 52 # "R"
data = "\005\006\006\003U\001UU\031WQ\f\006\031\000PU\f\031\rVU\002\031W\000\rQ\f\004\rVU\003\006\004"
new_data = Array.new
data.split(//).each do |e|
new_data << (e.unpack("H*")[0].to_i(16) ^ key).chr
end
p new_data.join
#OUTPUT "1227a5aa-ce82-4da8-9ba6-c49e809ba720"