Potrzebuję wymiany z PHP API, który kryptuje żądania i odpowiedzi. Po mojej stronie jestem w szynach 4.0.0 (ruby 2.0) i nie mogę sprawić, żeby to działało.Jak mogę zaimportować 128 CFB do Ruby?
Przeczytałem wiele odpowiedzi na ten temat i próbowałem zrozumieć, jak działa mcrypt, np. http://www.chilkatsoft.com/p/php_aes.asp, ale bez powodzenia. Nadal nie mogę odszyfrować zaszyfrowanych z PHP ani zaszyfrować czegoś, co PHP może odszyfrować
Czy możesz mi pomóc i zobaczyć, co robię źle?
kod PHP: Kod
$secretKey = "1234567891234567";
$encrypt = urlencode(base64_encode(mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
md5($secretKey),
$cleartext,
MCRYPT_MODE_CFB,
$secretKey
)));
$input = urldecode($input);
$decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
md5($secretKey),
base64_decode($input),
MCRYPT_MODE_CFB,
$secretKey);
Ruby:
def self.encode(params = {})
cipher = OpenSSL::Cipher::AES.new(256, :CFB)
cipher.encrypt
cipher.key = Digest::MD5.hexdigest("1234567891234567")
cipher.iv = "1234567891234567"
encrypted = cipher.update(params.to_query) + cipher.final
CGI.escape(Base64.strict_encode64(encrypted))
end
def self.decode(answer)
decrypted = Base64.decode64(CGI.unescape(answer))
decipher = OpenSSL::Cipher::AES.new(256, :CFB)
decipher.decrypt
decipher.key = Digest::MD5.hexdigest("1234567891234567")
decipher.iv = "1234567891234567"
decoded = decipher.update(decrypted) + decipher.final
end
Czy porównywałeś wyjściowe funkcje MD5, szczególnie jeśli są one wielkie lub małe (PS, jeśli rozwiąże to problem, który chciałbym opublikować jako odpowiedź)? –
To były moje pierwsze sprawdzenia, md5, Base64.encode64 i kod urlenkowy. Ale dla zapisu: md5 php: fb77fc7f384d0c2bc555701e57a9e589 md5 ruby: fb77fc7f384d0c2bc555701e57a9e589 – Stephanie
Cóż, to zostawia mnie zaskoczonego. Myślę, że mogę tylko debugować odpowiedź, ale to oznacza upewnienie się, że mój interpreter PHP i Ruby działa poprawnie ... już głosowałem. –