如何确保消息m∈Zp

时间:2017-04-21 11:11:03

标签: math encryption data-conversion

我正在实施ORUTA并使用JPBC库。
在其中一种算法中,对于消息消息,指定消息m:

m∈Zp,对于某些大质数p。(可能等于m

我有一条消息文本,那么如何确保上述等式成立?

这个问题与https://crypto.stackexchange.com/questions/44340/how-can-i-make-sure-message-m-%e2%88%88-zp不同。我想要算法,我可以按照以下步骤在java中编写程序。

我也有一个大米。如何将m转换为m的块,以便每个块保持等式?
感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

  

我也有一个大米。我怎样才能将m转换为m块   这个等式适用于每个块?

我不清楚你在问什么,也不知道“ORUTA”是什么。但是,这里至少是一个将大整数分解为大小小于p的整数数组的方法的java示例。但是,根据“ORUTA”的详细信息,可能无法接受。

/**
 * Returns an array of BigIntegers, each one of which is < p. The array represents the
 * radix p expansion of m, in big-endian order.
 *
 * @param m an integer, m >= 0.
 * @param p an integer, p > 1.
 * @return an array of BigIntegers.
 */
private static BigInteger[] breakIntoChunks(BigInteger m, BigInteger p) {
    assert m.signum() >= 0 && p.compareTo(BigInteger.ONE) > 0;
    if (m.signum() == 0) { /* m == 0 is a special case. */
        return new BigInteger[]{BigInteger.ZERO};
    }
    ArrayList<BigInteger> chunks = new ArrayList<>();
    while (m.signum() != 0) {
        BigInteger[] divRem = m.divideAndRemainder(p);
        chunks.add(0, divRem[1]);
        m = divRem[0];
    }
    return chunks.toArray(new BigInteger[0]);
}