0

嗨,我想知道是否有人可以帮助我解决以下问题我对 a 部分的尝试如下。我不明白为什么我的程序不起作用,它运行但在评估 b 部分的程序时没有返回任何值。我已经使用 print 命令来检查数组是否找到了它似乎正在做的匹配,但看起来它只是忽略了它 在此处输入图像描述

婴儿步巨步协议如下

在此处输入图像描述

EL gamal 的协议是在此处输入图像描述

我的程序如下:

    proc3 := proc (alpha, beta, p)
    local k, R, i, j, N, A, t;
     description "baby step giant step procedure";
     N := floor(sqrt(p-1))+1;
     A := Array(0 .. N);
     for j from 0 to N do
     A[j] := `mod`(alpha^j, p)
     oo;
     for i from 0 to N do
     t := (beta*alpha^(-N*i))modp;
     for k from 0 to N do
     print(t, A[k]);
      if t = A*[k] then
      return k+N*i; 
      fi;
      od;
      od;
      end proc;

当我执行 proc3(3, 64, 137) 它什么都不返回所以我把打印命令放进去,现在它给出了

                                     64, 1
                         64, 3
                         64, 9
                         64, 27
                         64, 81
                        64, 106
                         64, 44
                        64, 132
                        64, 122
                         64, 92
                         64, 2
                         64, 6
                         64, 18
                         34, 1
                         34, 3
                         34, 9
                         34, 27
                         34, 81
                        34, 106
                         34, 44
                        34, 132
                        34, 122
                         34, 92
                         34, 2
                         34, 6
                         34, 18
                         78, 1
                         78, 3
                         78, 9
                         78, 27
                         78, 81
                        78, 106
                         78, 44
                        78, 132
                        78, 122
                         78, 92
                         78, 2
                         78, 6
                         78, 18
                         50, 1
                         50, 3
                         50, 9
                         50, 27
                         50, 81
                        50, 106
                         50, 44
                        50, 132
                        50, 122
                         50, 92
                         50, 2
                         50, 6
                         50, 18
                         18, 1
                         18, 3
                         18, 9
                         18, 27
                         18, 81
                        18, 106
                         18, 44
                        18, 132
                        18, 122
                         18, 92
                         18, 2
                         18, 6
                         18, 18
                          1, 1
                          1, 3
                          1, 9
                         1, 27
                         1, 81
                         1, 106
                         1, 44
                         1, 132
                         1, 122
                         1, 92
                          1, 2
                          1, 6
                         1, 18
                         99, 1
                         99, 3
                         99, 9
                         99, 27
                         99, 81
                        99, 106
                         99, 44
                        99, 132
                        99, 122
                         99, 92
                         99, 2
                         99, 6
                         99, 18
                         74, 1
                         74, 3
                         74, 9
                         74, 27
                         74, 81
                        74, 106
                         74, 44
                        74, 132
                        74, 122
                         74, 92
                         74, 2
                         74, 6
                         74, 18
                         65, 1
                         65, 3
                         65, 9
                         65, 27
                         65, 81
                        65, 106
                         65, 44
                        65, 132
                        65, 122
                         65, 92
                         65, 2
                         65, 6
                         65, 18
                         133, 1
                         133, 3
                         133, 9
                        133, 27
                        133, 81
                        133, 106
                        133, 44
                        133, 132
                        133, 122
                        133, 92
                         133, 2
                         133, 6
                        133, 18
                         15, 1
                         15, 3
                         15, 9
                         15, 27
                         15, 81
                        15, 106
                         15, 44
                        15, 132
                        15, 122
                         15, 92
                         15, 2
                         15, 6
                         15, 18
                         115, 1
                         115, 3
                         115, 9
                        115, 27
                        115, 81
                        115, 106
                        115, 44
                        115, 132
                        115, 122
                        115, 92
                         115, 2
                         115, 6
                        115, 18
                         14, 1
                         14, 3
                         14, 9
                         14, 27
                         14, 81
                        14, 106
                         14, 44
                        14, 132
                        14, 122
                         14, 92
                         14, 2
                         14, 6
                         14, 18

正如你可以清楚地看到比赛是在 18,18 但由于某种原因它没有考虑到这一点,谁能看到我做错了什么?它开始变得有压力。还有我们如何提高程序的效率,以便它可以计算更大的 a、b 和 p 值的 x。对于 ci 部分,我知道我需要使用 a 部分中的程序。感谢您花时间阅读本文,我们将不胜感激。

我的c部分程序如下

           Elgamal := proc (ciphy, hkt, p, a, b)
           local i, icdarray, s, q;
             icdarray := Array(5 .. 388);
               for i from 5 to 388 do 
               s := ciphy[i];
               q := `mod`(1/hkt^proc3(a, b, p), p);
               icdarray[i] := s*q;
               end do;
               return convert(icdarray, bytes);
              end proc;

其中proc3如下

                  proc3 := proc (alpha, beta, p)
               local k, R, i, j, N, A, t;
           Description "baby step giant step procedure";
             N := floor(sqrt(p-1))+1;
             A := Array(0 .. N);
             for j from 0 to N do
             A[j] := `mod`(alpha&^j, p);
            end do;
      for i from 0 to N do
         t := `mod`(beta*alpha&^(-N*i), p);
        for k from 0 to N do
        if t = A[k]
       then return k+N*i;
     end if; 
     end do; 
       end do; 
     end proc;

                  header := 9681348997

密文:[12432485341, 2579085006, 13736574369, 4105371047, 9573017222,

7824534168, 10017411248, 13292180343, 2356887993, 9573017222,

10017411248, 13765667419, 9795214235, 10017411248, 2801282019,

608404939、4105371047、13765667419、11572790339、13765667419、

11765894302、10017411248、13765667419、4549765073、10017411248、

13736574369, 2579085006, 4549765073, 10017411248, 4549765073,

13765667419, 2801282019, 830601952, 4105371047, 10017411248,

7824534168, 13765667419, 13736574369, 2801282019, 7824534168,

10017411248, 830601952, 9573017222, 4327568060, 13765667419,

6076051114、8268928194、13292180343、10017411248、7824534168、

386207926、2801282019、4105371047、2579085006、6076051114、

608404939、13765667419、6076051114、830601952、13765667419、

4105371047、11765894302、10017411248、13765667419、13292180343、

13736574369, 10017411248, 608404939, 10017411248, 7824534168,

2134690980、13765667419、4105371047、11765894302、2801282019、

4105371047、13765667419、2579085006、608404939、13292180343、

11543697289, 2579085006, 7824534168, 10017411248, 4549765073,

13765667419、4994159099、5853854101、6076051114、830601952、

4327568060、6076051114、5853854101、10017411248、7824534168、

13765667419, 4105371047, 6076051114, 13765667419, 9573017222,

13292180343、10017411248、13765667419、4105371047、11765894302、

10017411248, 13765667419, 5853854101, 6076051114, 7824534168,

4549765073、13765667419、11572790339、13765667419、4105371047、

11765894302、2801282019、4105371047、13765667419、4105371047、

11765894302、10017411248、13765667419、4327568060、2801282019、

608404939、4549765073、13292180343、13736574369、2801282019、

11543697289, 10017411248, 13765667419, 5853854101, 2801282019,

13292180343、13765667419、11765894302、6076051114、7824534168、

7824534168、2579085006、8268928194、4327568060、2134690980、

13765667419, 11543697289, 7824534168, 10017411248, 13736574369,

2579085006、11543697289、2579085006、4105371047、6076051114、

9573017222、13292180343、2385981043、13765667419、3245676045、

9573017222、2801282019、2579085006、608404939、4105371047、

6105144164、13765667419、5853854101、11765894302、10017411248、

608404939, 13765667419, 9573017222, 13292180343, 10017411248,

4549765073、13765667419、4105371047、6076051114、13765667419、

4549765073、10017411248、13292180343、13736574369、7824534168、

2579085006、8268928194、10017411248、13765667419、4105371047、

11765894302、10017411248、13765667419、6076051114、13736574369、

13736574369, 2801282019, 13292180343, 2579085006, 6076051114,

608404939, 2801282019, 4327568060, 13765667419, 386207926,

2579085006、4327568060、4327568060、2801282019、6298248127、

10017411248, 13765667419, 4105371047, 11765894302, 7824534168,

6076051114、9573017222、6298248127、11765894302、13765667419、

5853854101、11765894302、2579085006、13736574369、11765894302、

13765667419、4105371047、11765894302、10017411248、2134690980、

13765667419, 11543697289, 2801282019, 13292180343, 13292180343,

10017411248、4549765073、6105144164、13765667419、9795214235、

10017411248、2801282019、608404939、4105371047、13765667419、

830601952、10017411248、386207926、10017411248、7824534168、

11572790339, 7824534168, 2579085006, 4549765073, 4549765073,

10017411248、608404939、13765667419、2801282019、608404939、

4549765073、13765667419、4105371047、9573017222、9795214235、

8268928194、4327568060、10017411248、4549765073、6076051114、

5853854101、608404939、2385981043、13765667419、4994159099、

5853854101、6076051114、830601952、4327568060、6076051114、

5853854101, 10017411248, 7824534168, 13765667419, 5853854101,

2801282019, 13292180343, 13765667419, 2801282019, 13765667419,

4105371047、6076051114、9573017222、7824534168、2579085006、

13292180343、4105371047、6105144164、13765667419、4105371047、

11765894302、10017411248、13765667419、830601952、2579085006、

7824534168, 13292180343, 4105371047, 13765667419, 10017411248,

386207926、10017411248、7824534168、13765667419、13292180343、

10017411248, 10017411248, 608404939, 13765667419, 6076051114,

608404939、13765667419、4105371047、11765894302、10017411248、

13765667419, 5438553125, 2579085006, 13292180343, 13736574369,

5853854101、6076051114、7824534168、4327568060、4549765073、

2385981043、13765667419、4994159099、6076051114、9573017222、

7824534168、2579085006、13292180343、4105371047、6105144164、

13765667419, 8713322220, 2579085006, 608404939, 13736574369,

10017411248, 5853854101, 2579085006, 608404939, 4549765073,

13765667419、11765894302、2801282019、4549765073、13765667419、

4549765073、10017411248、13736574369、2579085006、4549765073、

10017411248、4549765073、6105144164、13765667419、9795214235、

10017411248、2801282019、608404939、4105371047、13765667419、

8075824231、2579085006、4549765073、2579085006、6076051114、

4105371047、8075824231、2385981043]

4

1 回答 1

2

您的条件测试是if t = A*[k] then 您打错字的地方,因为您想要A[k]而不是那个乘法。

如果您使用的是 2D 数学输入模式,则输入中 A 和 [ 之间的空格将被解析为隐式乘法。如果这是您的情况,或者您反复被这种情况所吸引,那么请考虑切换到 1D Notation 输入模式(GUI 偏好)。

于 2017-02-24T17:31:17.017 回答