0

啊,遗留应用程序的乐趣。

我正在将旧的 Kohana 3 PHP 应用程序迁移到 Ruby/Rails。一个字段已存储在数据库中,使用 Kohana 的“加密”模块加密。http://kohanaframework.org/3.0/guide/api/Kohana_Encrypt

迁移数据时,我需要解密这些值,然后使用其他东西重新加密它们。

但是,我的 Mcrypt 知识为零,我似乎无法解密它。

我知道的:

  • Kohana 设置为使用 -- 密码:MCRYPT_RIJNDAEL_128,模式:MCRYPT_MODE_NOFB,我有密钥
  • Kohana base64 在存储之前对数据进行编码
  • 我在任何地方都找不到初始化向量。看起来 Kohana 对每条数据都使用了自定义 IV?
  • 我有一个用于 Mcrypt 的 Ruby gem。https://github.com/kingpong/ruby-mcrypt 它需要第二个参数——“cbc”是给出的例子。不知道这是做什么用的,或者我可以在这个遗留的 Kohana 项目中找到该信息的位置。

关于如何解密这些数据的任何想法?我是否拥有我需要的所有信息?我有点失落...

提前致谢。

4

2 回答 2

1

对我来说,诀窍是使用 PHP 的“mcrypt_get_iv_size”为我的密码和模式确定 IV 大小。其次是将 Mcrypt gem 中的模式从 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)
于 2013-08-23T15:03:44.697 回答
0

如果我是你,我会在 Kohana 应用程序的数据库中创建一个新字段,然后创建一个脚本,利用 Kohana 解密函数来解密该值并将它们存储在新字段中。

当您将数据库移植到 ruby​​ 并创建一个脚本以将这些值加密回您希望在 Ruby 中加密它们的方式时。然后删除新字段。

这将使迁移变得不那么痛苦。

于 2013-08-23T12:21:22.420 回答