在Ruby中解密PHP MCRYPT_RIJNDAEL_256

Kyl*_*son 2 php ruby encryption ruby-on-rails mcrypt

我有一个充满加密密码的数据库,我需要在Ruby中解密该密码才能更改平台。如何将该PHP代码移植到Ruby?曾尝试在具有AES_256的Ruby中使用OpenSSL,但收到“错误解密”错误,以及我的密钥($ salt)不够长的错误。

在下面的示例中,$ salt是25个字符串。

这是PHP解密功能:

function decrypt_password($text, $salt)
{
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,
        $salt, base64_decode($text), MCRYPT_MODE_ECB, 
        mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
        MCRYPT_RAND)));
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*etr 5

还有一个用于mcrypt的ruby库。参见下面的示例实现:

require 'mcrypt'
require 'base64'

# base64_decode() equivalent
encrypted = Base64.decode64(text)

# preparing Mcrypt library for Rijndael cipher, 256 bits, ECB mode
cipher = Mcrypt.new(:rijndael_256, :ecb, salt, nil, :zeros)

# padding required
encrypted = encrypted.ljust((encrypted.size / 32.0).ceil * 32, "\0") 

# decrypt using Rijndael
decrypted = cipher.decrypt(encrypted).strip
Run Code Online (Sandbox Code Playgroud)

依存关系: libmcrypt

  • sudo apt-get install libmcrypt-dev (Ubuntu / Debian)
  • sudo yum install libmcrypt-devel (RHEL / CentOS / Fedora)

宝石: mcrypt

  • gem install ruby-mcrypt