\Numenor\AutenticacaoChecksum

Classe para geração de checksums para valores arbitrários.

Um checksum ("soma de verificação") é um código gerado para testar a integridade dos dados transmitidos por um canal qualquer de comunicação.

Na web, é especialmente importante que valores enviados e recebidos através do browser pelos métodos GET, POST, COOKIE, etc. sejam corretamente validados pelo servidor antes de serem operados, tendo em vista que os mesmos podem facilmente ser manipulados e informações vazadas para terceiros que não deveriam ter acesso a essas informações (por exemplo, um usuário ser capaz de visualizar os dados relativos a qualquer usuário simplesmente modificando o parâmetro userId enviado via GET).

O valor de checksum gerado por esta classe NÃO é criptograficamente seguro, uma vez que a função password_hash() do PHP trunca os valores de $password maiores do que 72 caracteres (tornando impossível o uso deste método de geração de hash para valores arbitrários). No entanto, ele é adequado para a assinatura de parâmetros enviados e recebidos em uma aplicação normal; o salt para o hash é gerado através da função openssl_random_pseudo_bytes(), que é menos previsível do que uniqid(), rand(), microtime() e outros métodos usuais de geração de salt.

Summary

Methods
Properties
Constants
__construct()
setChavePadrao()
gerarChecksum()
gerarChecksumLista()
validarChecksum()
No public properties found
SEPARADOR_SALT_HASH
No protected methods found
$chavePadrao
$algoritmo
$tamanhoSalt
$cryptoStrong
$chave
$arrayWrapper
$stringWrapper
N/A
No private methods found
No private properties found
N/A

Constants

SEPARADOR_SALT_HASH

SEPARADOR_SALT_HASH

Separador utilizado para separar o salt do hash gerado.

Properties

$chavePadrao

$chavePadrao : string

Chave padrão utilizada na aplicação para geração e validação dos checksums.

Este valor pode ser sobrescrito individualmente em cada instância da classe, mas permite que a mesma chave seja utilizada em toda a aplicação, caso isso seja mais conveniente.

Type

string

$algoritmo

$algoritmo : string

Identificador do algoritmo de hash utilizado para gerar os checksums da classe. Deve ser um dos valores aceitos pela função hash(), e retornados pela função hash_algos().

Type

string

$tamanhoSalt

$tamanhoSalt : string

Tamanho do salt gerado para o hash; deve ser um número inteiro positivo. Quanto maior o número, mais forte será o salt.

Type

string

$cryptoStrong

$cryptoStrong : boolean

Indica se o salt gerado pela função openssl_random_pseudo_bytes() deve ser criptograficamente seguro.

Type

boolean

$chave

$chave : string

Chave utilizada juntamente com o salt para gerar e validar o checksum gerado.

Esta chave deve ser a mesma tanto para a geração quanto para a verificação do checksum.

Type

string

$arrayWrapper

$arrayWrapper : \Numenor\Php\ArrayWrapper

Instância do objeto de encapsulamento das operações de array.

Type

\Numenor\Php\ArrayWrapper

$stringWrapper

$stringWrapper : \Numenor\Php\StringWrapper

Instância do objeto de encapsulamento das operações de string.

Type

\Numenor\Php\StringWrapper

Methods

__construct()

__construct(\Numenor\Php\ArrayWrapper  $arrayWrapper, \Numenor\Php\StringWrapper  $stringWrapper, string  $chave = '', string  $algoritmo = 'sha512') 

Método construtor da classe.

Parameters

\Numenor\Php\ArrayWrapper $arrayWrapper

Instância do objeto de encapsulamento das operações de array.

\Numenor\Php\StringWrapper $stringWrapper

Instância do objeto de encapsulamento das operações de string.

string $chave

Chave utilizada na geração do checksum. Caso não seja informado, a chave padrão definida será utilizada.

string $algoritmo

Identificador do algoritmo usado para gerar o checksum.

Throws

\Numenor\Excecao\ExcecaoAlgoritmoHashInvalido

se o algoritmo de hash informado é inválido ou não está instalado no servidor.

setChavePadrao()

setChavePadrao(string  $chave) 

Define a chave utilizada na geração do checksum.

Parameters

string $chave

Chave definida para utilização na geração dos checksums. Note que é possível alterar a chave uma vez definida (para permitir que chaves diferentes sejam utilizadas na geração de checksums diferentes), mas não é possível definir uma chave vazia.

Throws

\Numenor\Excecao\ExcecaoChecksumChaveInvalida

se a chave informada é nula.

gerarChecksum()

gerarChecksum(mixed  $valor, boolean  $encoded = false) : string

Gera um checksum para o valor informado, opcionalmente encodado em base64 para transmissão via canais que aceitem apenas texto ASCII.

Parameters

mixed $valor

Valor para o qual o checksum deve ser gerado.

boolean $encoded

Indica se o checksum gerado deve ser encodado com base64.

Throws

\Numenor\Excecao\ExcecaoChecksumSemChave

se a chave definida para utilização na geração de checksums não foi definida.

Returns

string —

O checksum gerado, no formato salt + separador + hash.

gerarChecksumLista()

gerarChecksumLista(\stdClass  $listaValores, boolean  $encoded = false) : \stdClass

Gera um checksum para a lista de valores informados (como uma coleção de pares nome => valor), opcionalmente encodados em base64 para transmissão via canais que aceitem apenas texto ASCII.

Parameters

\stdClass $listaValores

Lista de valores para os quais os checksums devem ser gerados.

boolean $encoded

Indica se os checksums gerados devem ser encodados com base64.

Returns

\stdClass —

Uma cópia da lista de valores originais, acrescentada dos checksums (identificados como atributos nome + 'Checksum').

validarChecksum()

validarChecksum(mixed  $valor, string  $checksum) : boolean

Valida um valor contra o checksum informado para o mesmo.

Parameters

mixed $valor

Valor a ser conferido.

string $checksum

Checksum informado para o valor.

Throws

\Numenor\Excecao\ExcecaoChecksumSemChave

se a chave definida para utilização na geração de checksums não foi definida.

Returns

boolean —

O checksum é válido para o valor informado?