Tôi cần phải trao đổi với một API PHP làm phiền các yêu cầu và câu trả lời. Về phía tôi, tôi đang ở trong đường ray 4.0.0 (ruby 2.0) và tôi không thể làm cho nó hoạt động được.Làm cách nào để tôi có thể mã hóa 128 CFB thành Ruby?
Tôi đã đọc rất nhiều câu trả lời về chủ đề này và đã cố gắng hiểu cách thức hoạt động của mcrypt, ví dụ: http://www.chilkatsoft.com/p/php_aes.asp, nhưng không thành công. Tôi vẫn không thể giải mã mã được mã hóa từ PHP hoặc mã hóa thứ gì đó mà PHP có thể giải mã
Bạn có thể giúp tôi và xem tôi đang làm gì sai không?
mã PHP: Mã
$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
Bạn đã so sánh đầu ra của các hàm MD5, đặc biệt nếu chúng là chữ hoa hoặc chữ thường (PS nếu điều này giải quyết vấn đề tôi muốn đăng câu trả lời này) –
Đó là lần kiểm tra đầu tiên của tôi, md5, Base64.encode64 và urlencode. Nhưng đối với hồ sơ: md5 php: fb77fc7f384d0c2bc555701e57a9e589 md5 ruby: fb77fc7f384d0c2bc555701e57a9e589 – Stephanie
Vâng, điều đó khiến tôi bối rối. Tôi đoán rằng tôi chỉ có thể gỡ lỗi câu trả lời, nhưng điều đó có nghĩa là đảm bảo trình thông dịch PHP và Ruby của tôi đang hoạt động và đang chạy ... đã được bỏ phiếu. –