Laravel - Encriptação
A criptografia é um processo de conversão de um texto simples em uma mensagem usando alguns algoritmos de forma que nenhum terceiro usuário possa ler as informações. Isso é útil para transmitir informações confidenciais porque há menos chances de um intruso mirar nas informações transferidas.
A criptografia é realizada usando um processo chamado Cryptography. O texto que deve ser criptografado é denominado comoPlain Text e o texto ou a mensagem obtida após a criptografia é chamada Cipher Text. O processo de conversão de texto cifrado em texto simples é chamadoDecryption.
Laravel usa AES-256 e AES-128criptografador, que usa Open SSL para criptografia. Todos os valores incluídos no Laravel são assinados usando o protocoloMessage Authentication Code para que o valor subjacente não possa ser violado depois de criptografado.
Configuração
O comando usado para gerar o key no Laravel é mostrado abaixo -
php artisan key:generate
Observe que este comando usa o gerador de bytes aleatórios seguros do PHP e você pode ver a saída conforme mostrado na captura de tela fornecida abaixo -
O comando fornecido acima ajuda a gerar a chave que pode ser usada no aplicativo da web. Observe a imagem mostrada abaixo -
Nota
Os valores para criptografia estão devidamente alinhados no config/app.php arquivo, que inclui dois parâmetros de criptografia, a saber key e cipher. Se o valor usando esta chave não estiver alinhado corretamente, todos os valores criptografados no Laravel serão inseguros.
Processo de criptografia
A criptografia de um valor pode ser feita usando o encrypt helpernos controladores da classe Laravel. Esses valores são criptografados usando cifra OpenSSL e AES-256. Todos os valores criptografados são assinados com o código de autenticação de mensagem (MAC) para verificar se há modificações na string criptografada.
O código mostrado abaixo é mencionado em um controlador e é usado para armazenar um segredo ou uma mensagem sensível.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DemoController extends Controller{
**
* Store a secret message for the user.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function storeSecret(Request $request, $id) {
$user = User::findOrFail($id);
$user->fill([
'secret' => encrypt($request->secret)
])->save();
}
}
Processo de descriptografia
A descriptografia dos valores é feita com o decrypt helper. Observe as seguintes linhas de código -
use Illuminate\Contracts\Encryption\DecryptException;
// Exception for decryption thrown in facade
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
Observe que se o processo de descriptografia não for bem-sucedido devido ao uso de MAC inválido, uma exceção apropriada será lançada.