2012-04-11 5 views
0

Следующая функция отлично работает в PHP. Как это можно перевести в Ruby on Rails.Ruby on Rails Расшифровка

Обратите внимание, что оба privateKey и iv имеют длину 32 символа.

mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $privateKey, base64_decode($enc), MCRYPT_MODE_CBC, $iv) 

Я попытался использовать следующее в Ruby, но получил плохую ошибку дешифрования.

cipher = OpenSSL::Cipher.new('aes-256-cbc') 

cipher.decrypt 
cipher.key = privateKey 
cipher.iv = iv 

decrypted = '' << cipher.update(encrypted) << cipher.final 
+1

Вы не используете это для ввода пароля, не так ли? –

+0

нет, не для пароля – user812120

ответ

0

Вы используете base64, декодируя его в примере php. Вы делаете это в рубине?

require "base64" 
Base64.decode64(encrypted) 

Кроме этого, код выглядит прямо на меня.

+0

Огромное спасибо за ваш быстрый ответ Вот полный код PHP $ iv = base64_decode ($ _ REQUEST ["bpi"]); $ enc = $ _REQUEST ["bpe"]; $ sig = $ _REQUEST ["bps"]; $ sig2 = hash_hmac ("sha256", utf8_encode ($ iv. '.'. $ Enc), utf8_encode ($ privateKey)); echo (mcrypt_decrypt (MCRYPT_RIJNDAEL_256, $ privateKey, base64_decode ($ enc), MCRYPT_MODE_CBC, $ iv)); Он отлично работает в PHP Но приведенный выше код Ruby дает мне плохую ошибку дешифрования. Я также использую декодирование base64 в рубине – user812120

+0

Есть ли Ruby-эквивалент MCRYPT_RIJNDAEL_256? Если я использую MCRYPT_RIJNDAEL_256 в PHP и AES-256-CBC в Ruby для шифрования одних и тех же данных с использованием того же ключа (32 символа) и iv (32 символа), а затем base64 кодирует зашифрованные данные, я всегда получаю разные результаты. Однако, если я использую MCRYPT_RIJNDAEL_128 в php и AES-256-CBC в Ruby, используя ключ (32 символа) и iv (16 символов), а затем base64 кодирует зашифрованные данные, я получаю те же результаты. – user812120

1

Вот некоторые код, который работает для меня:


def decrypt_data(data, pwd, iv) 
    encrypted_data = Base64.decode64(data) 
    aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC") 
    aes.decrypt 
    aes.key = Digest::MD5.hexdigest(pwd) 
    aes.iv = iv 
    result = aes.update(encrypted_data) + aes.final 
end 

В моем примере пароль шифруется с помощью MD5.

Я надеюсь, что эта помощь

+0

Большое спасибо за ваш быстрый ответ. Однако, похоже, это не работает для меня. Я новичок в Ruby on Rails. Я буду очень благодарен, если вы можете рассказать мне, как получить одинаковые результаты в Ruby on Rails, поскольку следующий php-код создает в php – user812120

+0

Если я удалю + aes.final из вышеуказанного кода ruby, я получаю строку, но это не читается. II не удалять + aes.final, я получаю ошибку «плохой дешифровать» – user812120

+0

Я нашел это в php doc http://php.net/manual/fr/function.mcrypt-decrypt.php Как вы можете видеть, первый комментарий sais "MCRYPT_RIJNDAEL_256 не эквивалентен AES_256". Это, вероятно, способ ... –