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.

questionAnswers(1)

yourAnswerToTheQuestion