2013-06-30 40 views

回答

3

Laravel Encrypter類使用Rijndael,塊大小爲256位,用於由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 source code

我希望這會有所幫助。

1

Laravel的Encrypter類很容易發生變化。這是由於一些安全漏洞得到修復。因此,要成功解密,您需要執行以下操作:

  1. 獲得正確的源代碼爲4.2.16;
  2. 讓它在你的機器上工作。確保你在相同的PHP環境下運行(使用最新版本的OpenSSL擴展);
  3. 使用正確的密鑰實例化Encrypter中的類,並可能設置正確的模式和算法;
  4. 最後,請致電decrypt

解密的所有其他所需參數(IV和MAC值)應包含在密文中。