标题:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
只看楼主
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
若n=pq,且p丶q均为素数,则φ(n)=(p-1)(q-1),由于6958000001674999998647为两个11位的素数的积,则可以当公开模数,做密码,这个位数少容易分解,不安全,只是演示RSA密码的原理。
则φ(n)=(p-1)(q-1)=6958000001505999998640,选公钥,
公钥的选择在1~φ(n)之间,公钥必须与φ(n)互质
根据互质数的性质:
(1):小数与大质数互质,
(2):小质数与不含有它的倍数的大合数互质,
由于122333221和6958000001505999998640 最大公约数为:1,所以122333221可以做公钥,而122333221模6958000001505999998640 的逆元为:4415860875509221693741,这个逆元就是私钥,私钥比公钥长,演示加密:明文123456789^122333221 MOD 6958000001674999998647=2920527367305698772708, 解密是这样:密文2920527367305698772708^4415860875509221693741 MOD 6958000001674999998647=123456789,还原回去了,这就是过程。
6958000001674999998647=71000000041*97999999967为两个11位的素数的积,则可以当公开模数,做密码,这个位数少容易分解,不安全,只是演示RSA密码的原理

我的程序缺点就是慢,太慢,效率低,而且还是仅能算2万位以内的,否则内存不足溢出!请求各位老师指导!

[此贴子已经被作者于2020-2-11 11:40编辑过]

2020-02-11 11:37
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
看来题主在做rsa加解密相关内容,这个我做过,我是用c做的。不需要做两万位啊,通常做到2^1024位足矣,用“dim a(64) as long”足以表达,如果vb支持无符号型数据定义,用32个就行了,大数运算先做一个大数加法函数和一个大数乘法函数,除法和减法调这两个函数即可,由于不支持无符号数定义,所以可将低16位作为运算结果,高16位作为进位。

能编个毛线衣吗?
2020-02-11 11:53
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
判断素数的原理:根据RSA密码的原理,当n为素数的时候成立,φ(n)=n-1,这样可以还原出明文,若n为合数就还原不回去,则判断出n为合数。
2020-02-11 11:57
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
回复 12楼 wmf2014
谢谢!您说的可能是一种方法,速度快吗?我不懂vc,不精通vb,大整数的加法减法乘法除法我也有了程序,关键是速度太慢。vc程序我看不懂,希望用vb编程的。或者指导一下原理,如何变成long型的?
2020-02-11 12:05
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
由于123=3*41,如果用前面的方法判断的话要先试验n是否能被3或41整除,否则可能输出判断结果错误。
2020-02-11 13:12
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
调整了一下,快了一点,没那么快,1001000000~1002000000之间的孪生素数对,将近一个小时了也还没有出来结果呢。

希望老师指导!咋回事呢?

[此贴子已经被作者于2020-2-11 16:06编辑过]

2020-02-11 16:03
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
算出来结果了,约1个多小时呢。
1001000000与1002000000之间有3056对孪生素数对:
1001000111和 1001000113  孪中1001000112
1001000381和 1001000383  孪中1001000382
1001001059和 1001001061  孪中1001001060
1001001227和 1001001229  孪中1001001228
1001001557和 1001001559  孪中1001001558
1001002151和 1001002153  孪中1001002152
1001002229和 1001002231  孪中1001002230
1001002487和 1001002489  孪中1001002488
1001002589和 1001002591  孪中1001002590
1001003681和 1001003683  孪中1001003682
1001004239和 1001004241  孪中1001004240
1001004287和 1001004289  孪中1001004288
1001004371和 1001004373  孪中1001004372
1001005217和 1001005219  孪中1001005218
1001005349和 1001005351  孪中1001005350
1001005427和 1001005429  孪中1001005428
1001006231和 1001006233  孪中1001006232
1001006261和 1001006263  孪中1001006262
1001007347和 1001007349  孪中1001007348
1001007779和 1001007781  孪中1001007780
1001008037和 1001008039  孪中1001008038
1001008661和 1001008663  孪中1001008662
1001009591和 1001009593  孪中1001009592
1001009741和 1001009743  孪中1001009742
1001010011和 1001010013  孪中1001010012
后面还有好多,超长了不发了。
2020-02-11 16:30
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
不会long型的程序,修改以后我的判断法不能运行了,咋回事呢?
2020-02-11 18:14
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
希望老师给个快速的程序!一天也算不出多少,下面是晚上程序晚上算出来的,祝大家新年新年快乐万事如意:
1011000000与1021000000之间有30808对孪生素数对:
1011000371和 1011000373  孪中1011000372
1011000377和 1011000379  孪中1011000378
1011000479和 1011000481  孪中1011000480
1011001427和 1011001429  孪中1011001428
1011001811和 1011001813  孪中1011001812
1011001877和 1011001879  孪中1011001878
1011001967和 1011001969  孪中1011001968
1011003179和 1011003181  孪中1011003180
1011003269和 1011003271  孪中1011003270
1011003359和 1011003361  孪中1011003360
1011003491和 1011003493  孪中1011003492
1011004037和 1011004039  孪中1011004038
1011004067和 1011004069  孪中1011004068
1011004661和 1011004663  孪中1011004662
1011005909和 1011005911  孪中1011005910
1011006011和 1011006013  孪中1011006012
1011006041和 1011006043  孪中1011006042
1011006341和 1011006343  孪中1011006342
1011007007和 1011007009  孪中1011007008
1011007091和 1011007093  孪中1011007092
1011007241和 1011007243  孪中1011007242
1011007451和 1011007453  孪中1011007452
1011007469和 1011007471  孪中1011007470
1011008057和 1011008059  孪中1011008058
1011008291和 1011008293  孪中1011008292
1011008567和 1011008569  孪中1011008568
1011008597和 1011008599  孪中1011008598
1011008891和 1011008893  孪中1011008892
1011009287和 1011009289  孪中1011009288
1011009299和 1011009301  孪中1011009300
1011009341和 1011009343  孪中1011009342
1011009887和 1011009889  孪中1011009888
1011009947和 1011009949  孪中1011009948
1011010289和 1011010291  孪中1011010290
1011010751和 1011010753  孪中1011010752
1011011459和 1011011461  孪中1011011460
1011013019和 1011013021  孪中1011013020
1011013151和 1011013153  孪中1011013152
1011013187和 1011013189  孪中1011013188
1011013649和 1011013651  孪中1011013650
1011013697和 1011013699  孪中1011013698
1011013811和 1011013813  孪中1011013812
1011015539和 1011015541  孪中1011015540
1011015557和 1011015559  孪中1011015558
1011015911和 1011015913  孪中1011015912
1011016001和 1011016003  孪中1011016002
1011016751和 1011016753  孪中1011016752
1011017087和 1011017089  孪中1011017088
1011017219和 1011017221  孪中1011017220
1011017867和 1011017869  孪中1011017868
1011017879和 1011017881  孪中1011017880
1011018131和 1011018133  孪中1011018132
1011018719和 1011018721  孪中1011018720
1011019421和 1011019423  孪中1011019422
1011019871和 1011019873  孪中1011019872
1011019967和 1011019969  孪中1011019968
1011020027和 1011020029  孪中1011020028
1011020471和 1011020473  孪中1011020472
1011020501和 1011020503  孪中1011020502
1011020537和 1011020539  孪中1011020538
1011021377和 1011021379  孪中1011021378
1011021617和 1011021619  孪中1011021618
1011021701和 1011021703  孪中1011021702
1011022919和 1011022921  孪中1011022920
1011023477和 1011023479  孪中1011023478
1011023567和 1011023569  孪中1011023568
1011023639和 1011023641  孪中1011023640
1011023729和 1011023731  孪中1011023730
1011024851和 1011024853  孪中1011024852
1011025619和 1011025621  孪中1011025620
1011026759和 1011026761  孪中1011026760
1011026789和 1011026791  孪中1011026790
1011026921和 1011026923  孪中1011026922
1011026957和 1011026959  孪中1011026958
1011027497和 1011027499  孪中1011027498
1011028349和 1011028351  孪中1011028350
1011028631和 1011028633  孪中1011028632
1011028721和 1011028723  孪中1011028722
1011028829和 1011028831  孪中1011028830
1011028937和 1011028939  孪中1011028938
1011029687和 1011029689  孪中1011029688
1011029909和 1011029911  孪中1011029910
1011030899和 1011030901  孪中1011030900
1011032327和 1011032329  孪中1011032328
1011033167和 1011033169  孪中1011033168
1011033431和 1011033433  孪中1011033432
1011033449和 1011033451  孪中1011033450
1011033731和 1011033733  孪中1011033732
1011033761和 1011033763  孪中1011033762
1011034259和 1011034261  孪中1011034260
1011034991和 1011034993  孪中1011034992
1011035489和 1011035491  孪中1011035490
后面还多内容超长不发了,程序慢,需要改进。
2020-02-12 08:39
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
是不是就是找0-2000000000的孪生素数?如果是的话我试试用vb打表看看,我记得用c打表我电脑大概花了30秒钟。
其实打表也还是有难度的,即使按位打表也得250M存储空间,就是只打奇数表也得125M空间,但vb对内存的操作远没有c的指针方便。
我现在都没有vb了,估计只能在excel的vba中测试。

[此贴子已经被作者于2020-2-12 09:31编辑过]


能编个毛线衣吗?
2020-02-12 09:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499181-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.203565 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved