我该如何在Laravel 4 Encrypt类之外,仅使用PHP解密已经使用该类加密的字符串?
Laravel的Encrypter
类使用具有256位块大小的Rijndael进行加密,这是由Mcrypt PHP扩展提供的。 Encrypter
类使用两种简单方法encrypt()
和decrypt()
来工作。
以下是一个示例:
<?php
$secret = Crypter::encrypt('some text here'); //encrypted
$decrypted_secret = Crypter::decrypt($secret); //decrypted
?>
既然你问如何在“Laravel之外”进行操作:
加密和解密是由加密器类完成的。Laravel源代码是公开的,以下是相关部分:
<?php
public function encrypt($value)
{
$iv = mcrypt_create_iv($this->getIvSize(), $this->getRandomizer());
$value = base64_encode($this->padAndMcrypt($value, $iv));
$mac = $this->hash($iv = base64_encode($iv), $value);
return base64_encode(json_encode(compact('iv', 'value', 'mac')));
}
protected function padAndMcrypt($value, $iv)
{
$value = $this->addPadding(serialize($value));
return mcrypt_encrypt($this->cipher, $this->key, $value, $this->mode, $iv);
}
public function decrypt($payload)
{
$payload = $this->getJsonPayload($payload);
$value = base64_decode($payload['value']);
$iv = base64_decode($payload['iv']);
return unserialize($this->stripPadding($this->mcryptDecrypt($value, $iv)));
}
protected function mcryptDecrypt($value, $iv)
{
return mcrypt_decrypt($this->cipher, $this->key, $value, $this->mode, $iv);
}
?>
如需文档和评论,请参阅GitHub上的Laravel源代码。
希望这可以帮助您。
Encrypter
类容易发生变化,这是由于某些安全漏洞已得到修复。因此,要成功解密,您需要执行以下操作:
Encrypter
类,并可能设置正确的模式和算法;decrypt
。