【发布时间】:2014-12-10 21:36:45
【问题描述】:
我需要与加密请求和答案的 PHP API 进行交换。在我这边,我在 rails 4.0.0 (ruby 2.0),我无法让它工作。
我已经阅读了很多关于这个主题的答案,并试图了解 mcrypt 的工作原理,例如http://www.chilkatsoft.com/p/php_aes.asp,但没有成功。我仍然无法解密从 PHP 加密的内容或加密 PHP 可以解密的内容
你能帮我看看我做错了什么吗?
PHP 代码:
$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
【问题讨论】:
-
你有没有比较过 MD5 函数的输出,特别是如果它们是大写或小写的(如果这解决了问题,我想把它作为答案发布)
-
这是我的第一次检查,md5、Base64.encode64 和 urlencode。但记录:md5 php:fb77fc7f384d0c2bc555701e57a9e589 md5 ruby:fb77fc7f384d0c2bc555701e57a9e589
-
好吧,这让我很难过。我想我只能调试答案,但这意味着确保我的 PHP 和 Ruby 解释器已启动并正在运行……已经投票了。
-
似乎您使用的是不同的块大小,即 php 中的 128 位和 ruby 中的 256 位。尝试将 AES.new(256, :CFB) 更改为 AES.new(128, :CFB) ..
标签: php ruby encryption aes mcrypt