In unserer Anwendung erhalten wir verschlüsselten Text von externen Server. Dieser Text wurde unter Verwendung von openssl
in PHP verschlüsselt.Openssl verschlüsselt in PHP muss in Ruby entschlüsselt werden
Wenn ich versuche, den Text in meinem Ruby-Code zu entschlüsseln, erhalte ich folgende Fehlermeldung:
OpenSSL::Cipher::CipherError: wrong final block length
I paar Lösungen auf Stackoverflow gelesen und war empfehlen folgende Zeile in dem Code cipher.padding = 0
hinzuzufügen. Aber nach dem Hinzufügen padding = 0
, erhalte ich unterschiedliche Fehler:
OpenSSL::Cipher::CipherError: data not multiple of block length
Im Folgenden meine grobe Skript habe ich geschrieben, um den Code zu entschlüsseln.
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)
Wenn ich den Text mit Ruby
verschlüsseln, dann kann ich es leicht entschlüsseln. Ich habe ein Problem, den Code zu entschlüsseln, die in php
verschlüsselt sind. Gibt es eine Möglichkeit, Verschlüsselung und Entschlüsselung zwischen PHP und Ruby kompatibel zu machen?
Sind Sie sicher, dass der PHP-Chiffretext mit denselben Parametern generiert wurde wie Sie? d.h. AES mit einer 128-Bit-Blocklänge im ECB-Modus? – helmbert
Ich kenne Ruby überhaupt nicht, aber es sieht für mich so aus, als ob Sie nach dem entschlüsseln statt vorher base64 dekodieren. – Mike
@helembert Ja, ich bin mir ziemlich sicher, dass der PHP-Code 128 Bit Blocklänge im ECB-Modus verwendet. – Reboot