欢迎来到天天文库
浏览记录
ID:20210687
大小:113.50 KB
页数:10页
时间:2018-10-11
《java安全通信概述》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java安全通信概述1.安全通信介绍 计算机安全通信过程中,常使用消息摘要和消息验证码来保证传输的数据未曾被第三方修改。 消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要检测原始数据是否被修改过。消息摘要与加密不同,加密是对原始数据进行变换,可以从变换后的数据中获得原始数据,而消息摘要是从原始数据中获得一部分信息,它比原始数据少得多,因此消息摘要可以看作是原始数据的指纹。 例:下面一段程序计算一段字符串的消息摘要packagecom.messagedigest;importjava.security.*;pu
2、blicclassDigestPass{ publicstaticvoidmain(String[]args)throwsException{ Stringstr="Hello,Isenttoyou80yuan."; MessageDigestmd=MessageDigest.getInstance("MD5");//常用的有MD5,SHA算法等 md.update(str.getBytes("UTF-8"));//传入原始字串 byte[]re=md.digest();//计算消息摘要放入byte数组中 //下面把消
3、息摘要转换为字符串 Stringresult=""; for(inti=0;i<re.length;i++){ result+=Integer.toHexString((0x000000ff&re[i])
4、0xffffff00).substring(6); } System.out.println(result); }} 当我们有时需要对一个文件加密时,以上方式不再适用。 又例:下面一段程序计算从输入(出)流中计算消息摘要。packagecom.messagedigest;importjava.io.*;impo
5、rtjava.security.*;publicclassDigestInput{ publicstaticvoidmain(String[]args)throwsException{ StringfileName="test.txt"; MessageDigestmd=MessageDigest.getInstance("MD5"); FileInputStreamfin=newFileInputStream(fileName); DigestInputStreamdin=newDigestInputStream(fi
6、n,md);//构造输入流 //DigestOutputStreamdout=newDigestOutputStream(fout,md); //使用输入(出)流可以自己控制何时开始和关闭计算摘要 //也可以不控制,将全过程计算 //初始时是从开始即开始计算,如我们可以开始时关闭,然后从某一部分开始,如下: //din.on(false); intb; while((b=din.read())!=-1){ //做一些对文件的处理 //if(b=='$')din.on(true);//当遇到文件中的符号$时才
7、开始计算 } byte[]re=md.digest();//获得消息摘要 //下面把消息摘要转换为字符串 Stringresult=""; for(inti=0;i<re.length;i++){ result+=Integer.toHexString((0x000000ff&re[i])
8、0xffffff00).substring(6); } System.out.println(result); }} 当A和B通信时,A将数据传给B时,同时也将数据的消息摘要传给B,B收到后可以用该消息摘要验证A传的消息是
9、否正确。这时会产生问题,即若传递过程中别人修改了数据时,同时也修改了消息摘要。B就无法确认数据是否正确。消息验证码可以解决这一问题。 使用消息验证码的前提是A和B双方有一个共同的密钥,这样A可以将数据计算出来的消息摘要加密后发给B,以防止消息摘要被改。由于使用了共同的密钥,所以称为“验证码”。 例、下面的程序即可利用共同的密钥来计算消息摘要的验证码packagecom.mac;importjava.io.*;importjava.security.*;importjavax.crypto.*;importjavax.cryp
10、to.spec.*;publicclassMyMac{ publicstaticvoidmain(String[]args)throwsException{ //这是一个消息摘要串 Stringstr="TestString"; //共同的密钥编码,这个可
此文档下载收益归作者所有