实习二数字签名与认证的实现.docx

上传人:b****4 文档编号:24831802 上传时间:2023-06-01 格式:DOCX 页数:14 大小:136.28KB
下载 相关 举报
实习二数字签名与认证的实现.docx_第1页
第1页 / 共14页
实习二数字签名与认证的实现.docx_第2页
第2页 / 共14页
实习二数字签名与认证的实现.docx_第3页
第3页 / 共14页
实习二数字签名与认证的实现.docx_第4页
第4页 / 共14页
实习二数字签名与认证的实现.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实习二数字签名与认证的实现.docx

《实习二数字签名与认证的实现.docx》由会员分享,可在线阅读,更多相关《实习二数字签名与认证的实现.docx(14页珍藏版)》请在冰豆网上搜索。

实习二数字签名与认证的实现.docx

实习二数字签名与认证的实现

实习二数字签名与认证的实现

一、实习目的

1.理解数字签名的概念和作用;

2.理解身份认证的基本方式和方法;

3.掌握Hash函数和数字签名的实现。

二、实习要求

1.实习前认真预习第3章的有关内容;

2.复习数字签名和身份认证相关内容;

3.熟悉Java平台的JCE包有关类。

三、实习内容

假定两个用户A、B,他们的公私钥对分别是KPUa、KPRa和KPUb、KPRb,,分发的消息为M,哈希函数h(x)。

请基于RSA算法实现数字签名,阶梯任务如下:

以本地两个目录模拟两个用户,实现消息M和签名的模拟分发;

实现过程:

 

A将信息M用自己的私钥加密后与M本身一起发送给B,B将签名用A的公钥解密,得出的信息与M对比,如果一致,说明消息就是A发的,因为只有A知道自己的私钥。

运行结果:

 

以MD5、SHA-1等哈希函数,实现消息M的摘要,实现M及摘要签名的模拟分发;

 

实现过程:

A对消息M用散列函数求出摘要,再用自己的私钥对摘要进行签名,将摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A发送的。

MD5:

 

SHA-1:

 

实现M密文状态下的签名与模拟分发;

实现过程:

 

A对消息M用B的公钥进行加密,将密文用散列函数求出摘要,再用自己的私钥对摘要进行签名,将密文摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A发送的,之后再使用自己的私钥解密得到的密文,最终得到明文消息M。

运行结果:

 

采用SSL,建立安全通信过程,实现Socket通信的签名分发;

将方案移植到某个web应用中,实现实用的签名分发。

4、实验总结

通过这次实验,对于数字签名的方式有了更多了解,认识到非对称密钥体系真的是一个很好的体系,既可以做签名,也可以进行加解密,功能很多。

 

附代码:

 

packageclassSKey_RSA{

publicvoidkey_RSA()throwsException{

KeyPairGeneratorkpg=("RSA");

(1024);

KeyPairkp=();

PublicKeypbkey=();

PrivateKeyprkey=();

FileOutputStreamf1=newFileOutputStream("");

ObjectOutputStreamoo1=newObjectOutputStream(f1);

(pbkey);

FileOutputStreamf2=newFileOutputStream("");

ObjectOutputStreamoo2=newObjectOutputStream(f2);

(prkey);

();

();

();

();

}

}

packageclassRsa_Op{

intflag=0;

publicbyte[]enc_pub(Strings)throwsException{

byte[]b=("UTF8");

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPublicKeypbk=(RSAPublicKey)();

();

BigIntegere=();

BigIntegern=();

BigIntegerm=newBigInteger(b);

BigIntegerm1=newBigInteger("0");

if((m1))==-1){

m=();

flag=1;

}

BigIntegerc=(e,n);

"M用公钥加密后的密文:

");

"c="+c);

byte[]re=();

Stringcs=();

BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("")));

(cs,0,());

();

returnre;

}

publicvoidenc_pri(Strings)throwsException{

byte[]b=("UTF8");

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPrivateKeyprk=(RSAPrivateKey)();

();

BigIntegere=();

BigIntegern=();

BigIntegerm=newBigInteger(b);

"签名前的M="+m);

BigIntegerm1=newBigInteger("0");

if((m1))==-1){

m=();

flag=1;

}

BigIntegerc=(e,n);

"签名后的M="+c);

//"将密钥加密后的密文c="+c);

Stringcs=();

BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("")));

(cs,0,());

();

}

publicbyte[]dec_pri()throwsException{

BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream("")));

Stringctext=();

();

BigIntegerc=newBigInteger(ctext);

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPrivateKeyprk=(RSAPrivateKey)();

BigIntegerd=();

BigIntegern=();

BigIntegerm=(d,n);

if(flag==1){

m=();

flag=0;

}

"将c解密后得:

");

"m="+m);

byte[]mt=();

();

();

returnmt;

}

publicbyte[]dec_pub()throwsException{

BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream("")));

Stringctext=();

();

BigIntegerc=newBigInteger(ctext);

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPublicKeypbk=(RSAPublicKey)();

BigIntegerd=();

BigIntegern=();

BigIntegerm=(d,n);

if(flag==1){

m=();

flag=0;

}

"公钥解密后的M="+m);

byte[]b=();

();

();

returnb;

}

}

:

packageclassSig{

publicvoidsigNoz(Strings,Rsa_Opro)throwsException{

SKey_RSAsr=newSKey_RSA();

();

(s);

}

publicvoidsigWithz(Stringalgorithm,Stringmsg)throwsException{

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPrivateKeyprk=(RSAPrivateKey)();

();

Signatures=(algorithm);

(prk);

byte[]b=("UTF8");

(b);

byte[]b1=();

"摘要签名:

");

for(inti=0;i<;i++){

",");

}

FileOutputStreamf3=newFileOutputStream("");

(b1);

}

publicvoidsigWithz(Stringalgorithm,byte[]msg)throwsException{

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPrivateKeyprk=(RSAPrivateKey)();

();

Signatures=(algorithm);

(prk);

(msg);

byte[]b1=();

"密文摘要签名:

");

for(inti=0;i<;i++){

",");

}

FileOutputStreamf3=newFileOutputStream("");

(b1);

}

}

:

packageclassDec_Sig{

publicStringdec_SigNoz(Rsa_Opro)throwsException{

byte[]ss=();

Strings=newString(ss,"UTF8");

returns;

}

publicbooleandec_SigWithz(Stringmsg,Stringalgorithm)throwsException{

byte[]data=("UTF8");

FileInputStreamf2=newFileInputStream("");

intnum=();

byte[]b=newbyte[num];

(b);

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPublicKeypbk=(RSAPublicKey)();

Signatures=(algorithm);

(pbk);

(data);

booleanresult=(b);

returnresult;

}

publicbooleandec_SigWithz(byte[]msg,Stringalgorithm)throwsException{

FileInputStreamf2=newFileInputStream("");

intnum=();

byte[]b=newbyte[num];

(b);

FileInputStreamf=newFileInputStream("");

ObjectInputStreamoi=newObjectInputStream(f);

RSAPublicKeypbk=(RSAPublicKey)();

Signatures=(algorithm);

(pbk);

(msg);

booleanresult=(b);

returnresult;

}

}

:

packageclassTest1{

publicstaticvoidmain(String[]args)throwsException{

//TODOAuto-generatedmethodstub

FileReaderf=newFileReader("消息");

BufferedReaderbr=newBufferedReader(f);

Stringss=();

Rsa_Opro=newRsa_Op();

Sigs=newSig();

(ss,ro);

Dec_Sigds=newDec_Sig();

Stringdecs=(ro);

"签名解密后得到的消息M'="+decs);

if(decs)){

"验证签名成功!

");

}

}

}

:

packageclassTest2{

publicstaticvoidmain(String[]args)throwsException{

//TODOAuto-generatedmethodstub

SKey_RSAsr=newSKey_RSA();

();

FileReaderf=newFileReader("消息");

BufferedReaderbr=newBufferedReader(f);

Stringss=();

Rsa_Opro=newRsa_Op();

Sigs=newSig();

"使用SHA-1算法生成摘要");

("SHA1WithRSA",ss);

Dec_Sigds=newDec_Sig();

booleanok=(ss,"SHA1WithRSA");

if(ok==true){

"验证签名成功!

");

}

}

}

:

packageclassTest3{

/**

*@paramargs

*@throwsException

*/

publicstaticvoidmain(String[]args)throwsException{

//TODOAuto-generatedmethodstub

FileReaderf=newFileReader("消息");

"SHA1算法:

");

BufferedReaderbr=newBufferedReader(f);

Stringss=();

SKey_RSAsr=newSKey_RSA();

();

Rsa_Opro=newRsa_Op();

Sigs=newSig();

Dec_Sigds=newDec_Sig();

byteb[]=(ss);

("SHA1WithRSA",b);

booleanok=(b,"SHA1WithRSA");

if(ok==true){

"验证签名成功!

");

byte[]result=();

Stringrs=newString(result,"UTF8");

"公钥解密后的明文M:

"+rs);

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1