从 PHP 从 COM 的 DOTNET 类调用 RNGCrypto



我正试图通过COM层从PHP调用RNGCryptoServiceProvider->GetBytes()。我可以让它连接到类,但每次调用该方法时,我都会得到两个错误中的一个(与参数有关)。我认为这与GetBytes通过引用获取固定大小的字节数组有关。由于PHP不支持固定大小的字符串,这就是它有趣的地方:

错误1:

$util    = new DOTNET(
    'mscorlib',
    'System.Security.Cryptography.RNGCryptoServiceProvider'
);
$data = new Variant(str_repeat(chr(46), $size), VT_UI1 | VT_ARRAY);
$util->GetBytes($data);

错误[0x80070057]参数不正确

->GetBytes()行引发。

如果我不使用变体,而只使用纯字符串,我仍然会得到相同的错误。

然而,如果我传入这样的数组:

$data = array('');
$util->GetBytes($data);

参数0:类型不匹配。

因此,我认为variable/string方法是正确的(因为它通过了参数类型检查)。但我就是不知道如何让它发挥作用。

方法的C#接口是:

public override void GetBytes(
    byte[] data
)

感谢

我接触PHP已经好几年了,更不用说尝试与.net进行互操作了,但如果您创建一个填充到所需长度的字符串并将其解包(),该怎么办?

$byte_array = unpack('C*', '12345678');
$util->GetBytes($byte_array);

哎呀,浪费了一两个小时玩,结果没有结果。我会看看这个:

http://www.sitepoint.com/forums/showthread.php?766246-使用DOTNET类生成PHP和NET安全RndNum

有两个合理的选择——构建某种简单的包装器,这样你就可以调用一个无参数的方法,或者使用内置的跨平台方法。

相关内容

  • 没有找到相关文章

最新更新