解密Kohana存储的数据3

时间:2013-08-22 23:02:15

标签: kohana mcrypt

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

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

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

然而,我的Mcrypt知识是零,我似乎无法解密。

我所知道的:

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

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

我的诀窍是使用PHP的“mcrypt_get_iv_size”为我的密码和模式确定IV大小。其次是将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)

答案 1 :(得分:0)

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

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

这将使迁移变得更加痛苦。