Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-Glitchy mod(%)运算符_Php_Operators_Modulo_Diffie Hellman - Fatal编程技术网

PHP-Glitchy mod(%)运算符

PHP-Glitchy mod(%)运算符,php,operators,modulo,diffie-hellman,Php,Operators,Modulo,Diffie Hellman,出于某些原因:显示如下所示: 3 to the power of x mod 17 is 19. This is called v. Shared person a (v): 19 在脚本中,它看起来像这样(该脚本用于描述Diffie-Hellman密钥交换算法): $p=“17”; $g=“3”; $px=gmp_nextprime(rand()); $x=gmp\U标准($px); $a=$g^$x%$p; echo“$g乘以x的幂mod$p等于$a。这称为v.”; 回声“共享人a(v

出于某些原因:显示如下所示:

3 to the power of x mod 17 is 19. This is called v.

Shared person a (v):
19 
在脚本中,它看起来像这样(该脚本用于描述Diffie-Hellman密钥交换算法):

$p=“17”;
$g=“3”;
$px=gmp_nextprime(rand());
$x=gmp\U标准($px);
$a=$g^$x%$p;
echo“$g乘以x的幂mod$p等于$a。这称为v.
”; 回声“
共享人a(v):
”; 回声“$a
”;
想知道这是否是PHP的一个小故障,因为:

if{x mod y=z}, z<y

如果{x mod y=z},z那么,
^
不是幂运算符,模在它们之前;此外,GMP已经具有功率模功能:

$p="17";
$g="3";
$px=gmp_nextprime(rand());

$a = gmp_powm($g, $px, $p);

echo "$g to the power of x mod $p is $a. This is called v.<br>";
echo "<br>Shared person a (v):<br>";
echo "$a <br>";
$p=“17”;
$g=“3”;
$px=gmp_nextprime(rand());
$a=gmp_功率($g,$px,$p);
echo“$g乘以x的幂mod$p等于$a。这称为v.
”; 回声“
共享人a(v):
”; 回声“$a
”;
^
不是指数运算符,而是按位异或运算符。从PHP5.6开始,指数运算符是
**
。所以它应该是

$a = ($g ** $x) % $p;


PHP5.6中添加了指数运算符。在此之前,您需要使用
pow()
函数:

$a = pow($g, $x) % $p;

我喜欢你的答案,但我得到了这个错误:PHP解析错误:语法错误,意外的“*”在PHP5.6中添加了指数运算符。听起来你运行的是一个旧版本。“PHP版本5.4.4-14+deb7u11”感谢你给我的老式消息。这让我不得不更新Linux标题。:)你为什么不使用
gmp\u powm()
?第二个问题是:数字太大了。PHP语言本身只支持整数的大小不超过2^31-1。我不认为3^(20亿)对我有好处。这正是你应该使用gmp的原因。
$a = $g ** ($x % $p);
$a = pow($g, $x) % $p;