分享
 
 
 

非对称加密算法中求解大正整数模大正整数的余数的快速计算法

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

前提:

模数的补数小于模数本身;

定义:

假设:I=Uint.MaxValue+1;

整数A=a0*I0+a1*I1+a2*I2+…+ae*Ie;ai<I;

模数M=m0*I0+m1*I1+m2*I2+…+mk*Ik;mi<I;2*mk>I;

求解:A % M

解法:

设:N=Ik+1-M;

因为:mk>0;

所以设:N=n0*I0+n1*I1+n2*I2+…+nk*Ik;ni<I;

当e<k时:

A%M=A;

当e>k时:

设:z=e-k-1;

因为:I>=mk+1;

所以:

ae*I*Ie-1>= mk*ae*Ie-1+ae*Ie-1;

ae*Ie>=ae*mk*Ik+z+ae*Ik+z;

ae*Ie>=ae*Iz *(mk*Ik+Ik);

因为:

Ik>m0+m1*I1+m2*I2+…+mk-1*Ik-1;

Ik+mk*Ik>M;

A>=ae*Ie;

所以:

A>ae*Iz*M;

A%M=(A-ae*Iz*M)%M;

A%M=(A-ae*Iz*(Ik+1-N))%M;

A%M=(A-ae*Iz*Ik+1+ae*Iz*N)%M;

A%M=((a0+a1*I1+…+ae-1*Ie-1)+ae*Iz*N)%M;

A%M=((a0+a1*I1+…+az-1*Iz-1)+(az*Iz+az+1*Iz+1+…+ae-1*Ie-1)+ae*Iz*N)%M;

A%M=((a0+a1*I1+…+az-1*Iz-1)

+((az*Iz+az+1*Iz+1+…+ae-1*Ie-1)+ae*Iz*( n0+n1*I1+…+nk*Ik)))%M;

A%M=((a0+a1*I1+…+az-1*Iz-1)

+((az*Iz+az+1*Iz+1+…+ae-1*Ie-1)+ae*( n0*Iz+n1*Iz+1+…+nk*Ie-1)))%M;

A%M=((a0+a1*I1+…+az-1*Iz-1)

+((az+ae*n0)*Iz+(az+1+ae*n1)*Iz+1+…+(ae-1+ae*nk)*Ie-1))%M;

当e=k时:

当A<M时:A%M=A;

当A>=M时:

因为:2*mk>I;

所以:

2*M>A;

M>A-M>=0;

A%M=A-M=A+N-Ik+1= (A+N)%Ik+1;

C#代码实现:

摘自笔者的Cms.Security.Rsa类,详细代码请Email:iswdj@263.net或QQ:228512046向笔者索要。

/// <summary>

/// 计算无符号大整数模无符号大整数的余数。

/// </summary>

/// <param name="InX">被余数,调用后值会改变</param>

/// <param name="ADCM">模数的补数,ADCM[Length-1]的值越小计算越快</param>

/// <param name="OutV">存储余数值用,数组长度应等于或大于模数数组长度</param>

private void mod(uint[] InX,uint[] ADCM,uint[] OutV)

{

/*

* 如果你的调用程序不能确定OutV数组长度是否等于模数数组长度,请启用此条语句。

*注意OutV数组长度不能小于模数数组长度。

*Array.Clear(OutV,0,OutV.Length);

*/

int i,iv;

uint Mult;

ulong Temp;

int Len_X=InX.Length;

int Len_M=ADCM.Length;

if(Len_X<Len_M)

{

Array.Copy(InX,0,OutV,0,Len_X);

for(i=Len_X;i<Len_M;i++) OutV[i]=0;

return;

}

while(--Len_X>=Len_M)

{

Mult=InX[Len_X];

InX[Len_X]=0;

while(Mult>0)

{

Temp=0;

iv=Len_X-Len_M;

for(i=0;i<Len_M;i++)

{

Temp+=(ulong)ADCM[i] * Mult + InX[iv];

InX[iv]=(uint)Temp;

Temp>>=32;

iv++;

}

Mult=(uint)Temp;

}

}

Temp=0;

for(i=0;i<Len_M;i++)

{

Temp+=(ulong)ADCM[i] + InX[i];

OutV[i]=(uint)Temp;

Temp>>=32;

}

if(Temp!=1) Array.Copy(InX,0,OutV,0,Len_M);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有