AES шифрование в ColdFusion, дешифрование в ruby - PullRequest
4 голосов
/ 10 ноября 2011

Мы не можем за нашу жизнь понять это.Нам нужно сделать ColdFusion шифровать данные, которые будет расшифровывать ruby.Мы пробовали так много разных настроек на стороне ColdFusion, просматривали SO сообщения, просматривали документы Adobe и не можем заставить его работать.ColdFusion необходимо зашифровать его, чтобы ruby ​​мог сделать это:

aes = OpenSSL::Cipher::Cipher.new('aes-256-cbc').encrypt
aes.key = Digest::MD5.hexdigest("#{password}#{salt}")
aes.iv = Digest::MD5.hexdigest("#{salt}#{password}")[0,16]
encrypted = aes.update(data) + aes.final

Псевдокод ColdFusion

key = tobase64(binaryDecode(lcase(hash(password & salt, "md5")), "hex"))
iv = lcase(left(hash(salt & password, "md5"), 16))
encrypt(data, key, "AES/CBC/PKCS5Padding", "Base64", iv)

Пробовал с / без tobase64 / binaryDecode (видел, что кто-то упоминал, что онбудет обрабатывать преобразование обратно внутренне или что-то глупое).lcase - заставить его генерировать MD5, которые выглядят так, как строит ruby.

Что мы делаем неправильно?Бесконечный bad decrypt на рубиновой стороне

1 Ответ

1 голос
/ 11 ноября 2011

Что мы делаем не так?

Вы не осторожны с кодировками.

Вы должны учитывать кодировки.

В ColdFusion вы должны использовать только байтовый массив в качестве ключа или IV, и вы должны только шифровать байтовые массивы.

Не иметь дело с ключами, IV или cleartexts в любой форме, кромебайты-массив.Не рассматривайте их как строки в кодировке base64, строки UTF-16 (что делает Java по умолчанию) или в любой другой форме.Вы всегда должны иметь дело только с байтовыми массивами, и вы всегда должны знать кодировку и использовать ту же кодировку между ColdFusion и Ruby.

Вы можете получить байтовый массив из строки, используя кодировку.Я хотел бы использовать кодировку UTF-8.Посмотрите на функции CharsetEncode и CharsetDecode.

Вы также неправильно используете клавиши и IV.Ключи могут генерироваться из паролей с использованием такого алгоритма, как PBKDF2, но только в том случае, если у вас нет хорошего способа генерации с использованием криптослучайного PRNG и его хранения.IV должен генерироваться с помощью криптослучайного PRNG и может добавляться к зашифрованному тексту, когда вы сохраняете или передаете его как удобный метод хранения / передачи IV.

...