- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
广东工业大学网络工程实验报告-非对称密码算法RSA
一.实验目的
通过。
运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。
(1)//大数求模//调用形式:N.Mod(A),返回值:N%ACBigInt CBigInt::Mod(CBigInt A){CBigInt X,Y;int len;unsigned __int64 num,div;unsigned long carry=0;X.Mov(*this);while(X.Cmp(A)0){ if(X.m_ulvalue[X.m_nLength-1]A.m_ulvalue[A.m_nLength-1]) { len=X.m_nLength-A.m_nLength; div=X.m_ulvalue[X.m_nLength-1]/(A.m_ulvalue[A.m_nLength-1]+1); }else if(X.m_nLengthA.m_nLength){len=X.m_nLength-A.m_nLength-1;num=X.m_ulvalue[X.m_nLength-1];num=(num32)+X.m_ulvalue[X.m_nLength-2];if(A.m_ulvalue[A.m_nLength-1]==0xffffffff)div=(num32);else div=num/(A.m_ulvalue[A.m_nLength-1]+1);}else{X.Mov(X.Sub(A));break;}
? Y.Mov(div);Y.Mov(Y.Mul(A));Y.m_nLength+=len;for(int i=Y.m_nLength-1;i=len;i--)Y.m_ulvalue[i]=Y.m_ulvalue[i-len];for(i=0;ilen;i++)Y.m_ulvalue[i]=0;X.Mov(X.Sub(Y));}if(X.Cmp(A)==0)X.Mov(0);return X;}
(2)If (n mod i=0 )
flay=l ;
else i=i+1; // n mod i是n除以i的余数.
If (flay=0 and I=n-1)
{
If (n mod i=0 )
flay=l;
else i=i+1;
}
Else
{
If (flay=0 )
cout“n是素数。”;
else cout“不是素数”;
}
最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂性太大。
②费马小定理?如果P是一个素数,且0ap,则a^(p-1)≡1(mod?p) 例如,67是一个素数,则2^66mod?67=1。? 利用费马小定理,对于给定的整数n,可以设计一个素数判定算法。通过计算d=2^(n-1)mod?n来判定整数n的素性。当d不等于1时,n肯定不是素数;当d等于1时,n则很可能是素数。但也存在合数n使得2^(n-1)≡1(mod?n)。例如,满足此条件的最小合数是n=341。为了提高测试的准确性,我们可以随机地选取整数1费马小定理毕竟只是素数判定的一个必要条件。满足费马小定理条件的整数n未必全是素数。有些合数也满足费马小定理的条件。这些和数被称做Carmichael数,前3个Carmichael数是561,1105,1729。Carmichael数是非常少的。在1~100000000范围内的整数中,只有255个Carmichael数。利用下面的二次探测定理可以对上面的素数判定算法作进一步改进,以避免将Carmichael数当作素数。二次探测定理如果p是一个素数,0xp,则方程x^2≡1(mod?p)的解为x=1,p-1 下面算法的步骤,n是我们要测试的数据: 0、先计算出m、j,使得n-1=m*2^j,其中m是正奇数,j是非负整数 1、随机取一个b,2=b? 2、计算v=b^m?mod?n 3、如果v==1,通过测试,返回 4、令i=1 5、如果v=n-1,通过测试,返回 6、如果i==j,非素数,结束 7、v=v^2?mod?n,i=i+1 8、循环到5#includeiostream
#include mycrypt.h
using namespace std;
int main(void)
{
int err, hash_idx, prng_idx, res;
unsigned long l1,l2;
unsigned char pt2[128],out[1024];
rsa_key key;
if (register_prng(sprng_desc) ==-1) {
pr
文档评论(0)