`
haofeng82
  • 浏览: 140612 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JAVA中进行数据完整性验证

 
阅读更多
最近在看JAVA安全方面的东东。简单地说,安全包括访问控制、数据安全两部分。安全访问控制是根据系统需求进行设计的,对资源进行访问控制的一种措

施。而数据安全包括数据传输过程中的安全防范措施,包括数据完整性、传输安全性、接收/发送方不可否认性等方面。下面就数据完整性验证部分做简单的

介绍。

假如我要下载一个最新版本的tomcat7 ,我会访问http://tomcat.apache.org/download-70.cgi。在下载列表中,我可以点击链接进行下载。但如何保证在

下载过程中,没有被其他程序篡改过?其他程序可能是网络传输过程中的第三方监听者,也有可能是我本地环境中存在的不良程序,如木马。在apache的下

载列表旁边,我们会发现有个md5的链接,点击打开之后,会出现如下字符串:cbad484f0b02f0daf775137aee0f4e2e *apache-tomcat-7.0.21.zip。这是做什

么用的呢?
这是一十六进制的编码字符串,又称“数字指纹”。他其实就是对原版文件(发送方发送的文件)完整性的验证标识符。当我们把文件下载到本地后,可以

自己对其进行验证,若验证的结果与发送方提供的指纹一致的话,则表明,在传输过程中,数据文件没有被篡改或其他损耗。

在JAVA中,我们可以借助JDK自带的包或者第三方安全工具包对其进行完整性验证工作。这里使用了BouncyCastle 工具包,下载地址为: http://www.bouncycastle.org/download/bcprov-jdk16-146.jar

代码如下:

public static void testInputStream(String filePath){
   /**
    * 使用BouncyCastleProvider,需加载对应的包。
    */
   Security.addProvider(new BouncyCastleProvider());
   Provider provider = Security.getProvider("BC");
   try {
    /**
     * 使用MD5进行完整性校验
     */
   MessageDigest digest = MessageDigest.getInstance("MD5",provider);
   /**
    * 获取文件流
    */
   FileInputStream in=new FileInputStream(filePath);
   DigestInputStream din =new DigestInputStream(in,digest);
   int bfSize=40000000;
   int length=in.available();
   int currentSize=0;
   boolean goon=true;
   /**
    * 根据文件流更新摘要数据源
    */
   while(goon){
    byte[] buffer =new byte[bfSize];
    int readSize=bfSize;
    if((length-currentSize)<bfSize){
     goon=false;
     readSize=length-currentSize;
    
    }else{
     goon=true;
     readSize=bfSize;
    
    }
    din.read(buffer, 0, readSize);
    if(goon==false){
     currentSize +=readSize;
    }else{
     currentSize+=bfSize;
    }
   
   }
   /**
    * 生成摘要信息
    */
   byte[] output = digest.digest();
   /**
    * 生成十六进制字符串
    */
   String outputStr =new String(Hex.encode(output));
   System.out.println("filePath:"+filePath);
   System.out.println("MD5:"+outputStr);
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
}
public static void main(String[] args){
 
  String filePath="E:/软件/os/apache-tomcat-7.0.21.zip";
  testInputStream(filePath);
 
}


0
3
分享到:
评论
1 楼 wfwind 2012-02-01  
呵呵真有缘。正好在找个方法,发现你写了,正好在我生日那天写的。太感谢了。

相关推荐

    java完整性校验解决方案

    JAVA中进行数据完整性验证 最近在看JAVA安全方面的东东。简单地说,安全包括访问控制、数据安全两部分。安全访问控制是根据系统需求进行设计的,对资源进行访问控制的一种措施。而数据安全包括数据传输过程中的安全...

    md5 哈希算法 数据完整性验证工具

    md5 SHA 哈希算法 数据完整性验证工具 非常小 提供三种算法:MD5 SHA1 CRC 算法

    JAVA_API1.6文档(中文)

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java 1.6 API 中文 New

    org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API ...

    JavaAPI1.6中文chm文档 part1

    由于比较大分为两个部分,这是第一...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 ...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java实现数字签名

    电子政务的所有活动都是政府行为,要求具有高度的可靠性和安全性,因此在电子政务系统上传输的数据必须具有抗否定性、完整性、安全性以及身份验证机制。数字签名技术这种能保证数据的完整性、机密性、抗否定性的信息...

    P神-Java安全漫谈

    数据加密和传输安全:Java提供了丰富的加密算法和API,可用于对敏感数据进行加密,以保护数据的隐私和完整性。同时,Java还支持安全的网络传输协议,如HTTPS,以确保数据在传输过程中的安全性。 安全漏洞和漏洞修复...

    JavaAPI中文chm文档 part2

    由于文件比较大 分为两个部分,这是...org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。...

    java api最新7.0

    org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API ...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics