2013-08-22 2 views
0

Ах, радости устаревших приложений.Расшифровка данных, хранящихся в Kohana 3

Я переношу старое приложение Kohana 3 PHP в Ruby/Rails. Поле хранилось в базе данных, зашифрованное с помощью модуля «Шифрование» Коханы. http://kohanaframework.org/3.0/guide/api/Kohana_Encrypt

При переносе данных необходимо расшифровать эти значения, а затем повторно зашифровать их с помощью чего-то другого.

Тем не менее, мое знание в Mcrypt - это ноль, и я не могу его расшифровать.

Что я знаю:

  • Kohana настроен использовать - Шифр: MCRYPT_RIJNDAEL_128, режим: MCRYPT_MODE_NOFB, и у меня есть ключ
  • Kohana base64 закодировать это данные перед сохранением
  • Я не могу найти вектор инициализации в любом месте. Похоже, что Kohana использует пользовательский IV для каждой части данных?
  • У меня есть жемчужина Ruby для использования в Mcrypt. https://github.com/kingpong/ruby-mcrypt Требуется второй параметр - это пример cbc. Не уверен, что это за или где я могу найти эту информацию в этом наследии проекта Kohana.

Любые идеи о том, как получить эти данные в дешифрованном виде? У меня даже есть вся информация, в которой я нуждаюсь? Я немного потерял ...

Заранее спасибо.

+0

В [декодировании] (http://kohanaframework.org/3.0/guide/api/Kohana_Encrypt#decode) Функция IV определяется как '$ IV = подстрока ($ данные, 0, $ этом- > _iv_size); '. Итак, почему бы вам просто не использовать класс шифрования Коханаса и использовать его для дешифрования? ;) Или, если вы пробовали, какие ошибки вы получаете? – kero

ответ

0

Если бы я был вами, я бы создал новое поле в базе данных приложения Kohana, а затем создавал скрипт, который использует функцию дешифрования Kohana для дешифрования значения и сохранения в новом поле.

Когда порт базы данных за рубином и создайте сценарий, чтобы зашифровать эти значения так, как вы хотите их зашифровать в Ruby. После этого удалите новое поле.

Это сделает миграцию намного менее болезненной.

1

Трюк для меня состоял в том, чтобы определить размер IV с помощью «mcrypt_get_iv_size» PHP для моего шифрования и режима. Во-вторых, нужно было перевернуть режим в камне Mcrypt от cfb до nofb (режим, который использовался в настройке Kohana)

Портирован по методу дешифрования Koahana, и он работал как шарм.

data = Base64.strict_decode64(data) 
throw "INVALID DATA" if data.empty? 

# Extract the initialization vector from the data 
iv = data.slice(0, iv_size) 

throw "IV IS NOT THE EXPECTED SIZE" if iv.size != iv_size 

# Remove the iv from the data 
data = data [16..(data.size)] 

puts Mcrypt.new(cipher, :nofb, key, iv).decrypt(data) 
Смежные вопросы