PHP: Aviso mcrypt_generic_init (): o tamanho do Iv está incorreto; comprimento fornecido: 12, necessário: 8
Fatos básicos:
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$randSource = MCRYPT_DEV_URANDOM;
Nota Esta não é uma pergunta estrita de codificação.
Contexto:
CentOS 7, Apache 2.4.12 e PHP 5.6.20.
Estou criando um email em HTML com um link "verificar seu endereço de email" que permite a conclusão de um processo de registro. Tudo no meu servidor privado virtual é UTF-8, e toda a entrada de formulário e de consulta é processada com funções de vários bytes (mb).
fundo
Como um experimento (Eu sei sobre a idade e o estado da biblioteca mcrypt), Estou tentando descriptografar os parâmetros da string de consulta criptografada do Blowfish. Suponha que, no caminho, a sequência de criptografia funcione perfeitamente e estou recebendo um email com o link.
No caminho, ohmac_hash()
assinatura (SHA-512, apenas para esta experiência) está funcionando e eu posso separar cada mensagem independente (32 caracteres) da sua soma de verificação de hash (128 caracteres). A decodificação Base64 da parte da mensagem separada está funcionando. Para cada parâmetro, sou deixado com otexto cifrado composto, onde o texto cifrado composto é igual aoTexto cifrado base IV +. Suponha que eu usouma versão dosubstr()
para obter o IV e o texto cifrado base de forma independente (que é o par para o curso).
Problema
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 12, needed: 8
Suponha que eu tenha vasculhado o manual do PHP e o Stackoverflow. Suponha que eu tenha examinado outras questões semelhantes, mas não exatamente como esta. Suponha que eu procurei na Internet sem sucesso. Suponha que eu tenha experiência suficiente para configurarmb_string
devidamente. Suponha que eu cuidarei do preenchimento do mcrypt quando superar esse problema atual.
Os problemas de vários bytes podem estar interferindo na descriptografia?
Base64 poderia codificar oIV + base cipher text
corromper o IV?
O preenchimento da base64 poderia ser um problema?
Devo especificar um mais específicoMCRYPT_BLOWFISH_*
?
Por que o tamanho IV do blowfish informa 8 bytes, mas raramente produz um IV de 8 bytes?
Qual substr () devo usar,substr()
oumb_substr()
, para uma configuração que se inclina para criar tudo UTF-8 e processa todas as outras entradas como UTF-8 de vários bytes. Eu sei que é uma pergunta estranha, mas todos os exemplos de sequência de decriptografia de criptografia manual do PHP usamsubstr ()e nenhum usamb_substr()
. Tudo no meu site funciona com mb_functions quando possível, e eu não me importaria de usarsubstr()
se resolveu o meu problema, mas não o resolve. Quando eu usomb_substr()
, Recebo o seguinte aviso.
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 11, needed: 8
Alguém tem alguma experiência com esse problema exato? Respostas construtivas serão recompensadas!
Mais recentes
Acima está um exemplo de hash do Blowfish que estou tentando reconstruir a partir de uma matriz, recebida por meio de uma SHA512 HMACed, simétrica Blowfish criptografada (CBC), uma string de consulta codificada pela Base64, urlencoded, url segura (ufa!).
Abaixo, é a aparência das seqüências de caracteres da sequência de consulta (depois de dividir o hash do blowfish acima) após a criptografia, assinatura e codificação base64, mas antes de serem codificadas por url. Cada um tem 128 caracteres (cada string fica mais longa à medida que você faz mais coisas).
Acima está a matriz decodificada Base64 e descriptografada Blowfish derivada da string de consulta (Obviamente, existem etapas de segurança entre esse resultado, mas estou apenas tentando mostrar o estado mais atual das coisas.) Algo não está certo. A criptografia parece funcionar sem erros. A descriptografia também não gera erros. O texto simples está errado. Se eu juntar / implodir esses elementos, eles não serão como o hash do Blowfish acima.