0

我正在将 lesspass 密码管理器移植到 powershell,但是在实现_consume_entropy() 方法时遇到了麻烦,尤其是 Python divmod

复制

PS> [bigint]$EntropyAsInt = 99600400399777174105034830393873797761817714609490038944205586760025858632478
PS> Write-Host $EntropyAsInt
99600400399777173995117538344184441997741701018199539534149245151907290284032

区别

99600400399777174105034830393873797761817714609490038944205586760025858632478
99600400399777173995117538344184441997741701018199539534149245151907290284032
                ^ start diverging he

问题

这是怎么回事?我使用了错误的类型吗?

4

3 回答 3

1

99600400399777174105034830393873797761817714609490038944205586760025858632478是一个[Double]...

PS> 99600400399777174105034830393873797761817714609490038944205586760025858632478
9.96004003997772E+76
PS> (99600400399777174105034830393873797761817714609490038944205586760025858632478).ToString("F0")
99600400399777200000000000000000000000000000000000000000000000000000000000000
PS> (99600400399777174105034830393873797761817714609490038944205586760025858632478).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Double                                   System.ValueType

当它被转换[BigInt]为原始值时,它已经丢失了。虽然从 a 开始[String]保存它...

PS> [bigint]$EntropyAsInt = '99600400399777174105034830393873797761817714609490038944205586760025858632478'
PS> $EntropyAsInt
99600400399777174105034830393873797761817714609490038944205586760025858632478

有关详细信息,请参阅实例化 BigInteger 对象

于 2019-03-26T21:42:15.650 回答
0

我可以复制这种行为,但无法解释它。我能做的就是给你一个解决办法。将变量定义为 a [bigint],然后将您的数字解析为引用先前创建的变量的字符串。

[bigint]$EntropyAsInt=0
[bigint]::TryParse('99600400399777174105034830393873797761817714609490038944205586760025858632478',[ref]$EntropyAsInt)

然后,您可以验证它是否$EntropyAsInt包含您之前指定的数字。

于 2019-03-26T21:38:35.770 回答
0

感谢 Joel 在 Powershell slack 上:

问题是 bigint 转换在解析值之后才会生效。它将首先被解析为双精度,其中出现不精确

如果您希望它保留确切的数字,则需要将文字放在引号中以使其成为字符串并让演员本身进行解析

[bigint]$var = "12345342827266162738883736363"

工作正常

[bigint]$EntropyAsInt = "99600400399777174105034830393873797761817714609490038944205586760025858632478"
于 2019-03-26T21:40:19.433 回答