首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NTRUEncrypt中多项式的模化简

NTRUEncrypt中多项式的模化简
EN

Stack Overflow用户
提问于 2010-04-24 20:57:50
回答 1查看 924关注 0票数 4

我正在实现NTRUEncrypt算法,根据NTRU教程,多项式f有一个逆g,使得f*g=1 mod x,基本上多项式乘以它的逆约化模x得到1。我得到了这个概念,但在一个例子中,他们提供了一个多项式f = -1 + X + X^2 - X4 + X6 + X9 - X10,我们将表示为数组[-1,1,1,0,-1,0,1,0,0,1,-1]有一个逆g of [1,2,0,2,2,1,0,2,1,2,0],所以当我们将它们相乘并减少模3的结果时得到1,但是当我使用NTRU算法进行乘法和减法时,我得到-2。

下面是我用Java编写的乘法算法:

代码语言:javascript
运行
复制
public static int[] PolMulFun(int a[],int b[],int c[],int N,int M)
{



for(int k=N-1;k>=0;k--)
{
    c[k]=0;
    int j=k+1;

    for(int i=N-1;i>=0;i--)
    {
        if(j==N)
        {
            j=0;
        }


        if(a[i]!=0 && b[j]!=0)
        {
            c[k]=(c[k]+(a[i]*b[j]))%M;

        }
            j=j+1;

    }

}

return c;

}

它基本取多项式a并将其乘以b,返回c中的结果,N指定polynomials+1的程度,在上面的例子中N=11;M是在上面的例子中的模3。

为什么我得到的是-2而不是1?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-24 21:10:30

-2 \f25 == 1-2\f6模-2\f25 3 -2\f6,所以计算很好,但是看起来-2\f25 Java-2\f6模数(余数)运算符的输出范围为-2\f25 mod n+1 -2\f6的-2\f25 [-n .. n] -2\f6,而不是标准的数学-2\f25 [0..n] -2\f6。

只需在c[k]=...%M代码行后面粘贴一个if (c[k] < 0) c[k] += M;,就应该没问题了。

编辑:实际上,最好将它放在最外层(k) for循环的末尾。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2704527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档