C# y PHP interpretan los valores de cadena MD5 de manera diferente, ¡lo cual es un dolor de cabeza!
Los bytes de C# son tipos numéricos de 8 bits y las cadenas están codificadas según Unicode. Si es diferente de la codificación de PHP, los resultados naturalmente serán diferentes. La clase de codificación Unicode predeterminada para C# es probablemente UTF-16LE, no estoy seguro, es necesario probarla, esta codificación codificará los caracteres ascii más simples como bytes dobles.
Por lo tanto, después de confirmar la codificación, la codificación en ambos lados se unifica y, utilizando un valor o cadena unificada para realizar el cálculo md5, el resultado será el mismo
Agregar:
p>El valor predeterminado debería ser una especie de Unicode. En realidad, no lo he probado y no puedo estar seguro.
Si la codificación que está intentando y php tienen tipos débiles, entonces el valor de retorno de md5 probablemente será tratado como un valor numérico por php, y MD5 es solo un número grande después de todo.
Puedes intentar no convertir el valor c# md5 en una cadena por primera vez, sino usar directamente la matriz de bytes como entrada para el segundo cálculo
p.d.
php genera minúsculas por primera vez y c# genera mayúsculas después de la unificación, es consistente la segunda vez