Delphi:en/decode用于某些函数

Delphi:en/decode用于某些函数,delphi,decode,Delphi,Decode,这是一个十六进制值的解码函数, 我试图找出它的编码功能,但没有运气 function dtwin(flg: Integer): Integer; var i:integer; ner,yrd, yrv :Cardinal; unr :Int64; begin ner := 1; unr := flg; yrd := $2E8CFFB0; yrv := $0C8CFFF0; for i := 1 to 32 do begin if (yrv

这是一个十六进制值的解码函数, 我试图找出它的编码功能,但没有运气

function dtwin(flg: Integer): Integer;
var i:integer;
ner,yrd, yrv :Cardinal;
unr :Int64;
begin
     ner := 1;
     unr := flg;
     yrd := $2E8CFFB0;
     yrv := $0C8CFFF0;
  for i := 1 to 32 do
   begin
    if (yrv and 1) <> 0 then
      begin
       ner := ((ner * unr) mod (yrd));
      end;
     unr := ((unr * unr) mod (yrd));
    yrv := (yrv shr 1) and $7FFFFFFF;
   end;
    Result := ner;
end;

简而言之,这是不可能做到的

请阅读:

设b=flg

设e=0C8CFFF0=210567152

设m=2E8CFFB0=780992432

然后这个函数计算b^e mod m

要反转它,我们需要找到e mod m的乘法逆

我试着用沃尔夫拉玛法

其结果是:

210567152不是可逆模780992432

原因是e和m不是共素数。它们都可以被二整除

从这一点我们可以得出结论,没有办法逆转这一功能,因为存在大肠菌群。 例如:

dtwin60=dtwin2326=62188800

当使用参数62188800调用reverse函数时,应该返回什么? 它应该返回60还是2326

下面是一些碰撞的更多示例:

dtwin(658) = dtwin(1300) = 682595280
dtwin(60) = dtwin(2326) = 62188800
dtwin(1316) = dtwin(2600) = 76519712
dtwin(2312) = dtwin(3522) = 317601904
dtwin(1974) = dtwin(3900) = 52357088
dtwin(120) = dtwin(4652) = 144155936
dtwin(2632) = dtwin(5200) = 679101872
dtwin(3290) = dtwin(6500) = 322955216
dtwin(3989) = dtwin(6725) = 301338273
dtwin(180) = dtwin(6978) = 628048624
dtwin(4624) = dtwin(7044) = 435300992
dtwin(5080) = dtwin(7658) = 2152880
dtwin(3948) = dtwin(7800) = 682904608
dtwin(2685) = dtwin(8183) = 461799889
dtwin(2461) = dtwin(8951) = 170465
dtwin(4606) = dtwin(9100) = 138445536
dtwin(240) = dtwin(9304) = 231258592
dtwin(4741) = dtwin(9603) = 586985553
dtwin(6117) = dtwin(9923) = 277591073
要生成对加密有用的结果,可以按如下方式生成数字。 我不会在这里详细介绍它是如何工作的。如果您需要了解更多信息,可以使用谷歌公钥加密

Select P and Q that are prime.
Compute N = P * Q
Compute T = (P-1) * (Q-1)   This is called the totient.
Select E that is coprime to N and T.
Select D that is the multiplicative inverse of E mod T.
你的模数是N,两个指数是E和D

To encrypt A, calculate B = ( A ^ E ) mod N
To decrypt B, calculate A = ( B ^ D ) mod N
请注意,在实际加密中,这些值通常有数百或数千位数字

以下是一些与示例数量级一致的结果:

N = 590108483 =$232C5743
E = 547145911 =$209CC8B7
D = 507147559 =$1E3A7527

N = 763464677 =$2D818BE5
E = 545809367 =$208863D7
D = 622691303 =$251D83E7

N = 948703211 =$388C0FEB
E = 885205759 =$34C32AFF
D = 893844127 =$3546FA9F

N = 897918037 =$35852455
E = 894567871 =$355205BF
D = 539129719 =$20227777

N = 754905647 =$2CFEF22F
E = 540902531 =$203D8483
D = 534729131 =$1FDF51AB

也许解码应该很难。至少你可以格式化你要我们检查的代码。对不起,我想我给你的指令中把yrd和yrv弄混了。yrd是模数,在两个例程中必须相同。yrv必须是乘法逆。请问,yrd和yrv代表什么?我必须道歉。我给出的生成有效模量和指数的方法是错误的。我修改了答案,给出了正确的方法,并提供了一些工作示例。