`
xp9802
  • 浏览: 1207639 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java中SHA1校验码的解决方案

阅读更多

SHA1 算法:

       SHA1 hash(SHA1 校验码)是为了保证文件完整性的技术,如果您对TCP/IP协议了解的话一定对CRC(循环冗余检验)了解,它是用来校验包的完整性的16位长的检验码,下面我来介绍一下SHA1 HASH。
       它是和MD5一样流行的消息摘要算法。1995年,联邦信息处理标准(FIPS)发布了180-1,作为安全散列标准。
        180-1出版的算法被定义为安全散列算法1(SHA1)。国家标准技术研究所(NIST)和国家安全局(NSA)开发了SHA1算法。SHA-1算法模仿MD4算法。现在有一个更新SHA-1算法的FIPS 180-2草案。SHA-1设计为和数字签名算法(DSA)一起使用。
       算法可以采用不超过264位的数据输入,并产生一个160位的摘要。输入被划分为512位的块,并单独处理。160位缓冲器用来保存散列函数的中间和最后结果。缓冲器可以由5个32位寄存器(A、B、C、D和E)来表示。SHA-1的初始化值定义如下:
        A = 67 45 23 01
        B = EF CD AB 89
        C = 98 BA DC FC
        D = 10 32 54 76
        E = C3 D2 E1 F0

        SHA-1由处理20个操作数的4次循环构成。每次循环都使用一个特定变量:
        第一次循环使用 K1 = 0x5a827999;
        第二次循环使用 K1 = 0x6ed9eba1;
        第三次循环使用 K1 = 0x8f1bbcdc;
        第四次循环使用 K1 = 0xca62c1d6;
        所有4次循环会应用到每个512位的块上,这些块用于输入缓冲器。因为复杂性和冲突的约束在SHA-1中比较高,它比MD5慢了大约30%。


MessageDigest类:
        Java.security.MessageDigest类是一种提供密码安全消息摘要如SHA-1和MD5功能的引擎类。为了计算消息摘要,首先应创建一个MessageDigest实例。与所有的引擎一样,对于特定类型的消息摘要算法而言,可通过调MessageDigest类中的getInstance静态方法得到MessageDigest对象:
        Public static MessageDigest getInstance(String algorithm)
算法名对大小写不敏感,例如:
        MessageDigest.getInstance(“SHA-1”);
        MessageDigest.getInstance(“sha-1”);
        MessageDigest.getInstance(“Sha-1”); 是一样的。
        调用者可以可选的制定提供者名,也可以指定provider实例,但必须保证请求算法的实现来自于指定的提供者:
        public static MessageDigest getInstance(String algorithm,String provider)
        public static MessageDigest getInstance(String algorithm,Provider provider)
        对getInstance方法的调用,会返回一个已初始化的MessageDigest对象,因此不需要进一步初始化对象。


接下来,为计算一些数值的摘要,应当向已初始化的消息摘要对象提供数据。可以通过update方法实现:
        public void update(byte input)
        public void update(byte[] input)
        public void update(byte[] input,int offset,int len)
用update方法提供数值后,可以用下列方法计算摘要:
        public byte[] digest()
        public byte[] digest(byte[] input)
        public int digest(byte[] buf,int offset,int len)
        前两个方法返回消息摘要。第三个方法将返回的摘要存储在buf中,从offset位置开始,len为分配给摘要的字节数,返回buf的真正字节数。带input阐述的digest方法,相当于调用无参数digest后又调用了update(byte[] input)方法。

 

SHA-1 例子:
        现在有i1、i2和i3,分别是3个字节数组,构成一个消息,计算其散列函数值:
MessageDigest sha1 = MessageDigest.getInstance(“sha-1”);
sha1.Update(i1);
sha1.Update(i2);
sha1.Update(i3);
byte[] hash = sha1.digest();
        对digest方法的调用则说明输入消息结束。进行初始化,update提交的数据丢失。Digest方法也可以把输入的最后一部分作为参数:
sha1.Update(i1);
sha1.Update(i2);
byte[] hash = sha1.digest(i3);
        在一些散列函数实现中,可以通过复制(clone)来获得中间散列数值。如:
要分别计算:i1,i1和i2,i1、i2和i3的散列数值。
//计算i1 hash
sha1.update(i1);
byte[] i1Hash = sha1.clone().digest();
//计算i1和i2 hash
sha1.update(i2);
byte[] i12Hash = sha1.clone().digest();
//计算i1、i2和i3 hash
sha1.update(i3);
byte[] i123Hash = sha1.digest();

 

2
1
分享到:
评论

相关推荐

    java完整性校验解决方案

    Java 数据完整性校验是保障软件安全的重要环节,尤其是在下载或传输文件时,确保数据未被篡改至关重要。这里我们将深入探讨 Java 中实现数据完整性验证的方法,主要关注MD5(Message-Digest Algorithm 5)哈希算法的...

    Java加密解密工具集+JCT+v1Java实用源码整理learns

    总的来说,这个Java加密解密工具集结合了JCT,为开发者提供了一站式的加密解决方案,涵盖了对称加密、非对称加密、哈希计算和数字证书处理等多个方面。通过深入学习和实践这些源码,开发者能够提升其在信息安全领域...

    GMSSL的java调用(JNI库和调用实例).zip

    总之,这个压缩包提供了一种在Java环境中利用GMSSL国密算法的解决方案,通过JNI库和Java调用示例,可以帮助开发者轻松地在自己的Java应用中集成SM2、SM3和SM4算法,满足我国对信息安全的特殊需求。

    java文件断点上传—支持超大大文件

    3. **校验码**:为了确保数据的完整性,每个文件块上传后,服务器会计算并保存校验码(如MD5或SHA-1),以便在组合文件时检查数据的一致性。 4. **并发上传**:为了提高上传速度,客户端可以并发上传不同的文件块。...

    登录源码java

    4. **Spring Security**:Spring Security是Spring框架的一个扩展,提供了一套完整的安全解决方案。它可以轻松地实现登录认证、授权、CSRF保护等功能。在Java项目中,配置Spring Security可以简化登录逻辑,同时提供...

    java图片上传.zip

    为了防止恶意文件上传,需要对上传的文件进行安全检查,例如验证文件类型、大小,甚至可以使用MD5或SHA校验码检查文件完整性。 8. **富文本编辑器集成**: 描述中提到图片上传与富文本编辑器有关,像CKEditor、...

    Thur_java_

    Spring Security提供了一整套安全解决方案。 以上就是"Thur_java_"项目中涉及到的主要Java知识点,涵盖了用户管理、业务逻辑处理、数据库操作、前端与后端交互等多个方面,展示了Java在实际项目开发中的应用。

    RSA文件加解密的JAVA程序

    在这个JAVA程序中,不仅实现了RSA算法,还结合了其他几种常用的加密算法,如SHA散列算法、Caser、LZW数据压缩算法、AES高级加密标准以及Vigenere密码系统,提供了更全面的安全解决方案。 首先,RSA(Rivest-Shamir-...

    jct_java_

    Java加密解密常用工具包JCT 1.0是由...JCT工具包为Java开发者提供了一站式的加密解密解决方案,简化了数据安全处理的过程。通过深入理解和合理运用,开发者可以更好地保护应用程序的数据安全,增强系统的整体安全性。

    常用工具jar包详解 很详细 文档中有源码实例

    ### 常用工具jar包详解 ...总之,这些工具包极大地简化了Java开发过程中的复杂度,无论是文件操作、对象管理还是数据编码,都能找到相应的解决方案。开发者应当根据项目需求灵活选用,以提高开发效率和代码质量。

    基于Java的两个通用安全模块的设计与实现.zip

    本文将深入探讨两个基于Java的通用安全模块的设计与实现,旨在提供一种安全可靠的解决方案,保护系统免受潜在的安全威胁。 首先,我们要理解Java的安全模型。Java的安全机制主要基于类加载器、安全策略和安全管理器...

    java企业内部即时通代码

    综上所述,Java企业内部即时通代码项目涵盖了网络编程、多线程、文件传输、用户认证等多个技术点,为实现高效的企业内部通信提供了完整的解决方案。通过深入理解并实践这些知识点,开发者可以构建出符合企业需求的...

    基于java在线汽车交易系统设计与实现.docx

    3. MySQL数据库:MySQL是一款开源的关系型数据库管理系统,因其高效、可靠和易于管理的特点,被选为本系统的数据存储解决方案。它将存储汽车信息、用户信息、交易记录等重要数据。 4. B/S架构:Browser/Server...

    commons-codec

    Apache Commons Codec库是一个Java工具包,它提供了各种编码和解码算法,包括常见的加密和哈希函数。在软件开发中,这些功能对于处理...无论是基础的文本编码还是复杂的加密算法,都可以在这个库中找到相应的解决方案。

    文件GZip压缩AES加密反向解密解压缩代码和jar

    在实际使用中,这一套解决方案可能是这样的流程:首先,使用`utils`类的`compressFileToGZip`方法对文件进行GZip压缩;然后,生成一个AES密钥,并用`encrypt`方法加密已压缩的文件;最后,如果需要验证文件,可以先...

    宁芝键盘固件和验证包,23年6月编程固件说明校验软件包

    8. **故障排除**:如果在更新过程中遇到问题,说明文档可能会提供一些常见问题及解决方案,帮助用户解决升级过程中可能出现的错误。 总的来说,这个软件包为宁芝键盘的用户提供了全面的固件管理和验证工具,旨在...

    文件加密软件 公司的技术总监写的

    文件加密软件是信息安全领域的重要工具,它通过特定的算法对数据进行编码,使得未经授权的用户无法访问或理解这些数据。本篇文章将详细讲解基于Java...理解这些基本概念和技术,有助于我们开发更安全的加密解决方案。

    基于JAVA的两个通用安全模块的设计与实现

    综上所述,基于Java的口令身份认证和文件安全传输模块设计与实现,是现代网络环境中解决安全问题的一种实用方法。结合了现有安全技术,实现了高效、便捷的安全服务,对于提升网络服务的整体安全性具有积极意义。

    webapi-security:web API开放接口设计解决方案

    开放接口设计-解决方案 安全设计(防窃取,防篡改,防泄漏) Java和JavaScrip互通验签及加解密(SM3, AES, 3DES) 多版本管理支持 一. 简单验签加密组件 1. 介绍说明 * BASE64 严格地说,属于编码格式,而非加密算法...

    微信pc扫码支付,app支付,小程序支付...

    综上所述,微信支付在PC扫码支付、App支付和小程序支付中提供了丰富的接口和解决方案,开发者可以根据具体业务需求选择适合的支付方式,并利用Java技术实现安全、高效的支付系统。在开发过程中,理解并掌握微信支付...

Global site tag (gtag.js) - Google Analytics