Estou migrando um software feito em Delphi para PHP e me deparei com um problema em uma maldita bendita função de criptografia.

Sofri um bocado tentando reescrever a função não pela complexidade do código e sim com as diferenças nos resultados.

A função faz uso dos operadores XOR e SHR na versão Delphi. O SHR foi relativamente fácil graças a experiência com operadores bit a bit e como a documentação do Delphi diz que o operador retira bits à direita de um número inteiro (como se percebe uma abreviação de SHift Right e o inverso é o operador SHLSHift Left) fiz testes usando o operador >> e acertei de primeira.

Já o operador XOR foi mais complicado. O PHP possui este operador e não me dei o trabalho de me certificar se ambos fazem a mesma coisa. Só quando fiz alguns testes usando diferentes inteiros é que pude perceber que não dão resultados iguais. No Delphi ele sempre retornava algum número enquanto em PHP ele retornava 1 ou 0 (na verdade true ou false).

Só quando li a documentação de ambas as linguagens percebi que são diferentes. No Delphi XOR é uma operação de comparação exclusiva (OR exclusivo) que retorna verdadeiro ou falso OU uma operação bit a bit de dois argumentos. No PHP XOR é apenas um operador para OR exclusivo. Ele não faz a operação de ajustes nos bits. O equivalente neste caso é o operador ^ (circunflexo).

Mais um aprendizado. Espero que ajude mais alguém algum dia.

Segue alguns links úteis.

http://php.net/manual/pt_BR/language.operators.bitwise.php

http://www.delphibasics.co.uk/RTL.asp?Name=xor

One response to “Convertendo xor, shr e shl de Delphi para PHP”

  1. Avatar de Gabriel Bonissoni
    Gabriel Bonissoni

    cara…. eu tava me batendo usando o xor no php…. mudei para ^ e deu tudo certo. obrigado pela ajuda 😀

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Blog do Regis - Meus aprendizados
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.