木子-欣 2022-10-07 14:35
浏览 14
已结题

Tonelli-shanks算法会陷入死循环吗?

关于Tonelli-shanks陷入死循环这回事
NTL::ZZ ECC::Quadcongruence(NTL::ZZ A, NTL::ZZ P,int mes)
{
        point Pm;    
        NTL::ZZ q = p - 1;
        NTL::ZZ s = ZZ(0);
        while (q % 2 == 0)
        {
            q =NTL::operator/=(q,2);
            s =NTL::operator+=(s,1);
        }
        if (s == ZZ(1))  // p同余3mod4
        {
            Pm.y = NTL::PowerMod(A, (p + 1) / 4, p);//明文嵌入后的坐表
            return Pm.y;
        }
        NTL::ZZ flag;
        for (NTL::ZZ i = ZZ(2); i < p; i++)
        {
            if (p - 1 == Quadresidue(i))
            {
                flag = i;   //找到最小的i  让L(i,p)=-1
                break;
            }
        }
        NTL::ZZ c = NTL::PowerMod(flag, q, p);
        NTL::ZZ r = NTL::PowerMod(A, (q + 1) / 2, p);
        NTL::ZZ t = NTL::PowerMod(A, q, p);
        NTL::ZZ m = s;
        NTL::ZZ t2 = NTL::ZZ(0);
        while (NTL::SubMod(t,1,p)!= 0)
        {
            t2 = NTL::MulMod(t,t,p);
            NTL::ZZ flag2;
            for (NTL::ZZ i = ZZ(1); i < m; i++)
            {
                if (NTL::SubMod(t2,1,p) == 0)
                {
                    flag2 = i;
                    cout << "flag2:" << flag2 << endl;
                    break;
                }
                t2 = NTL::MulMod(t2,t2,p);
            }
            NTL::ZZ b = NTL::PowerMod(c, NTL::operator<<(m - flag2 - ZZ(1), 1), p);  //要左移重载
            r = NTL::MulMod(r, b, p);
            c = NTL::MulMod(b, b, p);
            t = NTL::MulMod(t, c, p);
            cout << "t:   " << t << endl;
            m = flag2;
            //cout << "m的值" << m << endl;   //在这个地方卡死了  要注意上方A值的变化
        }
        Pm.y = r;   //明文嵌入后y的坐标  较小偏移量的y点
        cout << "嵌入明文的y坐标是:" << Pm.y<<endl;
    return Pm.y;
}


###### 为什么通过不了内层循环!while(NTL::SubMod(t,1,p)!= 0) ==while((t-1)%p!=0)  (我调用了NTL库中的大数函数)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月15日
    • 创建了问题 10月7日

    悬赏问题

    • ¥15 求caverdock使用教程
    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
    • ¥15 python随机森林对两个excel表格读取,shap报错
    • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
    • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
    • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值