【问题标题】:Decrypting data stored by Kohana 3解密 Kohana 3 存储的数据
【发布时间】:2013-08-22 23:02:15
【问题描述】:

啊,遗留应用的乐趣。

我正在将旧的 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 项目中哪里可以找到这些信息。

关于如何解密这些数据有什么想法吗?我是否拥有我需要的所有信息?我有点迷茫……

提前致谢。

【问题讨论】:

  • decode 函数中,iv 被定义为$iv = substr($data, 0, $this->_iv_size);。那么为什么不直接使用 Kohanas Encrypt 类并将其用于解密呢? ;) 或者如果你已经尝试过了,你会得到什么错误?

标签: kohana mcrypt


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

    这将使迁移的痛苦减轻很多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多