`
haofeng82
  • 浏览: 144424 次
  • 性别: 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 中实现数据完整性验证的方法,主要关注MD5(Message-Digest Algorithm 5)哈希算法的应用。 首先,我们要了解什么是数据完整性。数据完整性是指数据在创建、存储和传输过程中保持不变的...

    Java源码对添加数据进行数据验证.rar

    这个压缩包文件“Java源码对添加数据进行数据验证.rar”可能包含了一个或多个示例,用于演示如何在Java应用中实现数据验证。下面我们将详细探讨Java中的数据验证技术和策略。 1. **数据验证的重要性**: - 数据...

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

    这种算法的主要用途是用于数据的完整性验证,确保数据在传输或存储过程中没有被篡改。MD5由美国密码学家Ronald Rivest于1991年设计,尽管它在安全领域已经不再被视为安全,因为存在碰撞攻击的可能性,但在验证数据...

    Java中对输入框的各种验证插件

    6. **与后端验证的配合**:虽然前端验证提高了用户体验,但为了安全性和完整性,后端服务器也应进行数据验证。在Java后端,可以使用如Hibernate Validator或Bean Validation框架进行验证。 7. **错误处理**:当验证...

    java源码 java 获取文件md5值(用于检测文件完整性) 2018127

    在Java编程中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的摘要表示,通常用于验证文件的完整性和一致性。本示例代码是关于如何使用Java来计算文件的MD5哈希...

    form表达数据完整性校验

    在IT行业中,数据完整性是确保数据在传输和存储过程中不被篡改或丢失的重要概念。在前后端交互中,为了保证数据的完整性和安全性,通常会采用一系列的技术手段。本篇将围绕“form表达数据完整性校验”这一主题,详细...

    基于Java的批量数据导入及验证技术的研究与应用.pdf

    以物资管理系统为例,此技术的具体应用步骤包括在前端创建上传文件的函数,接收并处理文件,然后在后端通过Java进行数据解析和验证,确保数据的准确性和完整性。 综上所述,Java在批量数据导入及验证方面的应用具有...

    java表单的验证

    1. **数据完整性**:确保提交的数据是完整且有效的。 2. **用户体验**:减少用户因输入错误而导致的重新填写表单的时间。 3. **安全性**:防止恶意用户通过非法数据攻击系统。 4. **性能优化**:减少无效数据对...

    数据导入导出 (java)

    另外,错误处理和日志记录也是确保数据完整性和系统稳定性的关键。 5. **文件操作**: Java的`java.io`和`java.nio`包提供了丰富的文件操作功能。在导入导出过程中,需要正确处理文件路径,确保文件的读写权限,并...

    java多个数据库实现数据同步

    - **数据一致性验证**:在数据同步后,进行一致性校验,确保数据在各个数据库中的一致性。 - **性能优化**:减少同步延迟,避免过度负载,可能需要对同步频率、批量更新和缓存策略进行调整。 综上所述,Java实现多...

    java简单实现验证签名.zip

    在Java编程环境中,签名验证是安全领域中的一个重要概念,它涉及到数据完整性和来源验证。这里的"java简单实现验证签名"项目可能是指通过Java语言来实现一个简单的数字签名验证过程。数字签名通常用于确保数据未被...

    java 国密算法实现包含SM2 SM3 SM4和数字签名、数字证书的验证

    在Java中,你可以通过扩展`MessageDigest`类或者使用特定库来实现SM3哈希计算,以确保数据的完整性和一致性。 3. **SM4算法**:SM4是一种分组密码算法,主要用于块加密。它采用了128位的密钥和128位的数据块。在...

    Java实现浏览器CA证书的签名和验证

    数据完整性通过散列函数和数字签名技术保障,防止数据在传输过程中被篡改;身份确认依赖于口令字、公钥技术、数字签名和数字证书技术;交易的不可抵赖性是通过数字签名和数字证书技术来保证的,确保交易双方无法否认...

    java SHA256withRSA,json数据证书加签验签

    在Java编程环境中,SHA256withRSA是一种广泛使用的安全算法,它结合了SHA-256哈希函数和RSA非对称加密算法,用于确保数据的完整性和身份验证。这个"JAVA-SHA256withRSA.java"文件提供了一个完整的工具类RSAUtils,...

    java Tcp协议验证

    TCP校验和是确保数据完整性的手段之一。它对整个TCP头和数据部分进行计算,以检测传输过程中的任何错误。在Java中,TCP校验和的计算是由TCP协议栈自动完成的,程序员通常无需直接处理。然而,了解其工作原理有助于...

    java反序列化漏洞-验证.rar

    Java反序列化漏洞是软件安全领域的一个重要话题,尤其对于使用Java进行开发的系统来说...理解并能有效应对这类漏洞对于任何Java开发者或安全专业人员都是必要的,因为它可以帮助防止潜在的安全事故,保护系统的完整性。

    中国省市区数据源_java解析

    3. **数据验证**:确保数据的完整性和准确性,比如检查行政区域代码是否合法,名称是否匹配官方标准。 4. **数据存储**:处理后的数据可能需要存入数据库,如MySQL、PostgreSQL或MongoDB。这里会涉及到JDBC或NoSQL...

    Java滑块验证,整理

    在Java开发中,滑块验证是一种常见的用户身份验证机制,用于防止自动化的机器人或恶意软件进行非法操作。这种验证方式通常包含一个可移动的滑块,用户需要将滑动的部分与另一部分匹配来完成验证。这里我们将深入探讨...

    java MD5验证

    ### Java MD5验证知识点 #### 一、MD5概述 MD5(Message-Digest Algorithm 5)是一...综上所述,通过以上代码示例及解析,我们可以清晰地了解如何在Java中实现文件的MD5散列计算,这对于数据完整性校验具有重要意义。

    Java 数字签名和验证

    Java 数字签名是一种用于确保数据完整性和来源可信性的安全机制,它在网络安全中扮演着至关重要的角色。在Java中,我们可以使用内置的Java Cryptography Extension (JCE)库来实现RSA、DSA和ECC这三种不同的签名算法...

Global site tag (gtag.js) - Google Analytics