Я пытаюсь расшифровать зашифрованное сообщение, зашифрованное в веб-приложении Ruby, с помощью библиотеки RubyGem encrypted_strings.
Код клиента шифрования выглядит следующим образом:
cipher = EncryptedStrings::SymmetricCipher.new(:passphrase => "abcdefgh"*2)
cipher.encrypt("howdy")
=> "jEUQrH58Ulk=\n"
Алгоритм симметричного шифра по умолчанию выглядит как DES-EDE3-CBC (хотя документация для RubyGem не совпадает, но я пойду с тем, что говорит код). Поэтому на стороне Java я попробовал следующее, которое нашел в Интернете в качестве примера использования DES-EDE3-CBC API криптографии Java:
import javax.crypto.spec.DESedeKeySpec
import javax.crypto.spec.IvParameterSpec
import javax.crypto.Cipher
import javax.crypto.SecretKeyFactory
...
DESedeKeySpec k;
Cipher c;
...
k = new DESedeKeySpec("abcdefghabcdefgh".getBytes());
c = Cipher.getInstance("DESede/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, k);
decrypted = c.doFinal("jEUQrH58Ulk=\n".getBytes());
Когда я делаю это на стороне Java, я получаю следующее:
Wrong key size
Я также пытался использовать Java Crypto API с вектором инициализации, но не знал, что я должен установить байты, так как я не делаю это на стороне Ruby через библиотеку encrypted_strings, и она, кажется, установлена в C взаимодействие кода с OpenSSL.
Любые указатели приветствуются.
Я пользуюсь провайдером JCA. Я также попробовал DES / ECB / PKCS5Padding (что соответствует задокументированному алгоритму по умолчанию в документации по RubyGems, хотя код, по-видимому, ссылается на ранее упомянутый алгоритм DES-EDE3-CBC).
Я попытался прочитать вокруг крипто-API Java, но все документы, похоже, имеют одинаковые примеры кода и не очень много новых подсказок. Мои источники включают в себя: