【发布时间】:2014-02-24 11:08:57
【问题描述】:
我正在开发一个跨语言项目,该项目在 PHP 中封装了一个 ruby/Sinatra API,以供另一个团队使用。 API 公开的所有信息都不是敏感信息,但我们希望猜测 URL 的临时观察者不容易访问这些信息。
private function generateSliceIDToken($key){
$currentEpoch = time();
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
$encryptedBytes = mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$key,
$currentEpoch.**Passcode**,
MCRYPT_MODE_CBC, $iv
);
$ivAndEncryptedBytes = $iv . $encryptedBytes;
return urlencode(urlencode(base64_encode($ivAndEncryptedBytes)));
上面的代码使用 mcrypt 的 RIJNDAEL 实现加密密码和时间戳并将其编码以发送到 ruby API
if identifier.validate_token Base64.decode64(URI.unescape( URI.unescape(params[:token])))
Sinatra 抓取并解码
def validate_token(token)
cipher = OpenSSL::Cipher::AES.new(128, 'CBC')
cipher.decrypt
cipher.key = **key**
cipher.iv = token[0,16]
plain = cipher.update(token[16..-1]) + cipher.final
return plain[10,8] == **Passcode**
end
并传递它以进行解密
问题是,解密失败并出现“Bad Decrypt”错误
我被引导相信 Mcrypt 的 RIJNDAEL 和 Cipher 的 AES 是兼容的,但这个假设是否不正确?我能得到的任何帮助都是最有帮助的。
【问题讨论】:
标签: php ruby encryption mcrypt