W naszej aplikacji otrzymujemy zaszyfrowany tekst z zewnętrznego serwera. Ten tekst został zaszyfrowany za pomocą openssl
w php.Openssl zaszyfrowane w PHP musi zostać odszyfrowane w Ruby
Kiedy próbuję odszyfrować tekst w moim kodu Ruby, otrzymuję następujący komunikat o błędzie:
OpenSSL::Cipher::CipherError: wrong final block length
Czytałem kilka rozwiązań na StackOverflow i był proponuję dodać poniższy wiersz do kodu cipher.padding = 0
. Ale po dodaniu padding = 0
, otrzymuję inny błąd:
OpenSSL::Cipher::CipherError: data not multiple of block length
Poniżej jest mój szorstki skrypt Pisałem do odszyfrowania kodu.
require 'openssl'
require 'digest/sha1'
require 'base64'
encrypted = "VaZYJzn9QVEQIH4fmtA1Cg=="
key = "my_secret_key"
cipher = OpenSSL::Cipher::Cipher.new("aes-128-ecb")
cipher.decrypt
cipher.padding = 0
cipher.key = key
decrypted = cipher.update(encrypted)
decrypted << cipher.final
puts Base64.decode64(decrypted)
Gdybym zaszyfrować tekst używając Ruby
to mogę łatwo odszyfrować. Mam problem z odszyfrowaniem kodu, który jest zaszyfrowany w php
. Czy jest jakiś sposób, abym mógł sprawić, że szyfrowanie i deszyfrowanie będą kompatybilne między php i Ruby.
Czy jesteś pewien, że tekst zaszyfrowany w PHP został wygenerowany z tymi samymi parametrami, z których korzystasz? tj. AES z 128-bitową długością bloku w trybie ECB? – helmbert
Nie znam ruby, ale wygląda na to, że dekodujesz base64 po odszyfrowaniu zamiast wcześniej. – Mike
@helmbert tak Jestem całkiem pewien, że kod php używa 128 bitowej długości bloku w trybie ECB. – Reboot