gpt4 book ai didi

java - 在 Java 中创建 'mpint' 值(安全外壳 (SSH) 协议(protocol)架构 - RFC 4251)

转载 作者:行者123 更新时间:2023-12-01 11:36:55 27 4
gpt4 key购买 nike

我正在尝试使用 RFC4251 中指定的 BigInteger 创建 mpint 字符串:

mpint

Represents multiple precision integers in two's complement format, stored as a string, 8 bits per byte, MSB first. Negative numbers have the value 1 as the most significant bit of the first byte of the data partition. If the most significant bit would be set for a positive number, the number MUST be preceded by a zero byte. Unnecessary leading bytes with the value 0 or 255 MUST NOT be included. The value zero MUST be stored as a string with zero bytes of data.

By convention, a number that is used in modular computations in Z_n SHOULD be represented in the range 0 <= x < n.

Examples:

     value (hex)        representation (hex)
----------- --------------------
0 00 00 00 00
9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7
80 00 00 00 02 00 80
-1234 00 00 00 02 ed cc
-deadbeef 00 00 00 05 ff 21 52 41 11

一切都差不多清楚了,但如何解释“不得包含值为 0 或 255 的不必要的前导字节。”?

第二个问题是关于这一行的:“按照惯例,Z_n 中模计算中使用的数字应该在 0 <= x < n 范围内表示。”。怎么解释呢?

编辑:

我的第一个建议是:

/**
* Write 'mpint' to output stream including length.
*
* @param dos output stream
* @param bi the value to be written
*/
public static void writeMPInt(DataOutputStream dos, BigInteger bi) throws IOException {

byte[] twos = bi.toByteArray();

dos.writeInt(twos.length);
dos.write(twos);
}

根据上述规则,该方法是否有效?

最佳答案

Unnecessary leading bytes with the value 0 or 255 MUST NOT be included.

请勿在数字前面添加额外的 00ff字节。

  1. 80存储为00 00 00 03 00 00 80有一个额外的前导 00字节。

  2. -deadbeef存储为00 00 00 06 ff ff 21 52 41 11有一个额外的前导 ff字节。

在这两种情况下,数字在技术上都是正确的,但具有不必要的前导字节。

<小时/>

By convention, a number that is used in modular computations in Z_n SHOULD be represented in the range 0 <= x < n.

Z_n 是书写 integers modulo n 的粗体数学符号的 ASCII 方式。 。 (see Modular arithmetic)

这意味着,您不应该存储号码 x大于模数n待使用,或小于零。

  1. 您希望存储号码 123。

  2. 您知道该数字肯定会以 100 为模。即123 % 100 .

  3. 您应该存储 23。

<小时/>

Does this method is valid according mentioned above rules?

不,write()不检查字节数组中的值是否符合上述规则。

关于java - 在 Java 中创建 'mpint' 值(安全外壳 (SSH) 协议(protocol)架构 - RFC 4251),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877303/

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