gpt4 book ai didi

php - 从 PHP 从 COM 的 DOTNET 类调用 RNGCrypto

转载 作者:可可西里 更新时间:2023-11-01 13:27:03 24 4
gpt4 key购买 nike

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

错误一:

$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] The parameter is incorrect

->GetBytes() 行抛出。

如果我不使用变体,而只使用普通字符串,我仍然会遇到同样的错误。

但是,如果我像这样传入一个数组:

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

Parameter 0: Type mismatch.

所以我认为变体/字符串方法是正确的方法(因为它通过了参数类型检查)。但我只是不知道如何让它工作。

C# interface to the method是:

public override void GetBytes(
byte[] data
)

谢谢

最佳答案

自从我接触 PHP 以来已经有好几年了,更不用说尝试与 .net 互操作了,但是如果您创建一个填充到所需长度的字符串并解压 () 它呢?

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

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

http://www.sitepoint.com/forums/showthread.php?766246-PHP-and-NET-Secure-RndNum-Generation-using-DOTNET-class

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

关于php - 从 PHP 从 COM 的 DOTNET 类调用 RNGCrypto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com