我正在实施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的块,以便每个块保持等式?
感谢您的帮助:)
答案 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]);
}