Tenemos algunas cifras trabajando entre C# en .NET y PHP. No estoy familiarizado con VB.net. Supongo que usa la misma biblioteca de cifrado System.Security.Cryptography
.
En el lado de PHP, cambiamos de mcrypt a OpenSSL porque mcrypt no admite algunos modos y rellenos.
Siempre que use el mismo algoritmo (DES, AES, etc.), el mismo modo (CBC, ECB, etc.), el mismo relleno (PKCS1, PKCS5), el cifrado debería funcionar en ambas plataformas.
Ejemplo de cifrado usando un algoritmo AES-128 en el lado PHP usando mcrypt,
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128);
$data = $this->paddingAlgorithm->padData($data, $blockSize);
return $iv . mcrypt_encrypt($this->MCRYPT_DES, $keyBytes, $data, MCRYPT_MODE_CBC, $iv);
Tenga en cuenta que utilizamos el relleno PKCS7 pero mcrypt no lo soporte por lo que tiene que escribir el algoritmo de relleno. También anteponemos el IV (Vector inicial) al texto de cifrado. Puede guardarlo en otro lugar, pero lo necesita para descifrarlo.
Aquí está el correspondiente código C# para configurar el sistema de cifrado para descifrar,
// create the underlying symmetric algorithm with the given name
algorithm = (SymmetricAlgorithm)CryptoConfig.CreateFromName("RIJNDAEL");
// set cipher mode
algorithm.Mode = CipherMode.CBC;
// set padding mode
algorithm.Padding = PaddingMode.PKCS7;
Mi código PHP: http://pastie.org/584230 – shaiss