Estoy intentando llamar a RNGCryptoServiceProvider-> GetBytes() desde PHP a través de la capa COM. Puedo hacer que se conecte a la clase, pero cada vez que llamo al método, aparece uno de dos errores (relacionados con el parámetro). Creo que tiene algo que ver con el hecho de que GetBytes toma una matriz de bytes de tamaño fijo por referencia. A partir de PHP no soporta las cadenas de tamaño fijo, que es donde se pone interesante:Llamar a RNGCrypto desde clase DOTNET de COM desde PHP
de error 1:
$util = new \DOTNET(
'mscorlib',
'System.Security.Cryptography.RNGCryptoServiceProvider'
);
$data = new \Variant(str_repeat(chr(46), $size), VT_UI1 | VT_ARRAY);
$util->GetBytes($data);
Error [0x80070057] El parámetro es incorrecto
que se lanza por la línea ->GetBytes()
.
Si no utilizo una variante, pero solo uso una cadena simple, sigo recibiendo el mismo error.
Sin embargo, si paso en una matriz de este modo:
$data = array('');
$util->GetBytes($data);
Parámetro 0: tipo incorrecto.
Así que creo que el enfoque de variante/cadena es el correcto (ya que pasa la comprobación del tipo de parámetro). Pero no puedo entender cómo hacerlo funcionar.
El C# interface to the method es:
public override void GetBytes(
byte[] data
)
Gracias
Puede que no sea la solución que está buscando, pero ¿por qué no crear un servicio simple de Windows que reciba lo que quiera enviar desde PHP y luego devolver el valor codificado (hacer todo el procesamiento en C#)? –
@GustavoRubio esto es para el código de la biblioteca. En realidad, es parte de un PRNG portátil que intenta generar una fuerte aleatoriedad en todas las plataformas. Entonces los servicios o cualquier otra cosa que no sean llamadas al sistema no son realmente aceptables (por lo que estoy haciendo). Buena idea, aunque ... – ircmaxell