我怎样才能用Laravel 4加密类以外的Laravel 4加密类,仅用PHP解密已加密的字符串?
发布于 2013-06-30 15:06:12
Laravel Encrypter类使用块大小为256位的Rijndael进行加密,这是由Mcrypt扩展提供的。Encrypter类使用两个简单的方法,encrypt()和decrypt()。
下面是一个例子:
<?php
$secret = Crypter::encrypt('some text here'); //encrypted
$decrypted_secret = Crypter::decrypt($secret); //decrypted
?>,因为你在问如何“在Laravel之外”做这件事:
加密和解密由encrypter类完成。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);
}
?>有关文档和注释,请参见Laravel源代码 on GitHub。
我希望这能帮到你。
发布于 2015-01-17 15:14:46
Laravel的Encrypter类容易发生变化。这是由于一些安全漏洞得到了修复。因此,要成功解密,您需要执行以下操作:
Encrypter中实例化类,并可能设置正确的模式和算法;decrypt。解密所需的所有其他参数(IV和MAC值)应包含在密文中。
https://stackoverflow.com/questions/17390898
复制相似问题