当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 无标题文档 Java安全通信、数字证书及数字证书
 

 

 ·在.net1.2中对xquery的支持    »显示摘要«
    摘要:在.net1.2中支持xquery,xquery使用一种叫flwor的查询语言(音flower).例子如下: using system;using system.io;using system.xml;using system.xml.query;using system.data.sqlxml;namespace xquery{public class xquerysample{ public ......
    摘要:应该知道的: out是javax.servlet.jsp.jspwriter类的实例,jsp页面是对servlet进一步的封装。 问题: 假设jsp文件名为usingout.jsp, 其中有一个函数声明:void test(){ out.println("this is a test!"); // 编译出错!}%>void test(){? out.println("......


Java安全通信、数字证书及数字证书应用实践
无标题文档 java安全通信.数字证书及数字证书应用实践

摘要: 【程序编程相关:VB.net基础:如何获得并显示网上图片

abnerchai(柴政) 2004年6月 【推荐阅读:关于blog的作用的一些思考

通过本文中你可以学到以下知识: 【扩展信息:JSP标签自定义(2)---getPro

在本文中,我用详细的语言与大量的图片及完整的程序源码向你展示了在 java中如何实现通过消息摘要.消息验证码达到安全通信.以及用java的工具生成数字证书,与用程序给数字证书签名.以及用签名后的数学证书签名applet突破applet的访问权限的过程,给出了全部例子的详细代码.

•  程序间如何安全通信

•  什么是 及 如何生成消息摘要

•  什么是 及 如何生成消息验证码

•  如何使用 java工具生成与维护数字证书库

•  如何用程序给数字证书验证签名

•  如何利用数字证书给 applet签名突破applet的访问权限

关键字:

消息摘要.消息验证码.指纹.加密.安全. java.数字签名.applet.数字证书

一.基础知识

计算机安全通信过程中,常使用消息摘要与消息验证码来保证传输的数据未曾被第三方修改.

消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要检测原始数据是否被修改过.消息摘要与加密不同,加密是对原始数据进行变换,可以从变换后的数据中获得原始数据,而消息摘要是从原始数据中获得一部分信息,它比原始数据少得多,因此消息摘要可以看作是原始数据的指纹.

例:下面一段程序计算一段字符串的消息摘要

package com.messagedigest;

import java.security.*;

public class digestpass {

public static void main(string[] args) throws exception{

string str="hello,i sent to you 80 yuan.";

messagedigest md = messagedigest.getinstance("md5");//常用的有md5,sha算法等

md.update(str.getbytes("utf-8"));//传入原始字串

byte[] re = md.digest();//计算消息摘要放入byte数组中

//下面把消息摘要转换为字符串

string result = "";

for(int i=0;i<re.length;i++){

result += integer.tohexstring((0x000000ff&re[i])|0xffffff00).substring(6);

}

system.out.println(result);

}

}

当我们有时需要对一个文件加密时,以上方式不再适用.

又例:下面一段程序计算从输入(出)流中计算消息摘要.

package com.messagedigest;

import java.io.*;

import java.security.*;

public class digestinput {

public static void main(string[] args) throws exception{

string filename = "test.txt";

messagedigest md = messagedigest.getinstance("md5");

fileinputstream fin = new fileinputstream(filename);

digestinputstream din = new digestinputstream(fin,md);//构造输入流

//digestoutputstream dout = new digestoutputstream(fout,md);

//使用输入(出)流可以自己控制何时开始与关闭计算摘要

//也可以不控制,将全过程计算

//初始时是从开始即开始计算,如我们可以开始时关闭,然后从某一部分开始,如下:

//din.on(false);

int b;

while((b=din.read())!=-1){

//做一些对文件的处理

//if(b==´$´) din.on(true); //当遇到文件中的符号$时才开始计算

}

byte[] re = md.digest();//获得消息摘要

//下面把消息摘要转换为字符串

string result = "";

for(int i=0;i<re.length;i++){

result += integer.tohexstring((0x000000ff&re[i])|0xffffff00).substring(6);

}

system.out.println(result);

}

}

当 a与b通信时,a将数据传给b时,同时也将数据的消息摘要传给b,b收到后可以用该消息摘要验证a传的消息是否正确.这时会产生问题,即若传递过程中别人修改了数据时,同时也修改了消息摘要.b就无法确认数据是否正确.消息验证码可以解决这一问题.

使用消息验证码的前提是 a与b双方有一个共同的密钥,这样a可以将数据计算出来的消息摘要加密后发给b,以防止消息摘要被改.由于使用了共同的密钥,所以称为“验证码”.

例.下面的程序即可利用共同的密钥来计算消息摘要的验证码

package com.mac;


...   下一页
 ·mono 1.0 released    »显示摘要«
    摘要: novell and the mono project developer community is proud to announce the release of mono version 1.0, an open source implementation of the .net framework for use on linux, unix, macos x and windows s......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE