Java中SHA1-hash(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();

http://hi.baidu.com/00nn/blog/item/76b5788977c87cb00e244471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明
MD5、DES、SHA-1和RSA是一些常见的密码学算法,它们在安全领域都有一些特定的问题。 1. MD5(Message Digest Algorithm 5): - 安全性问题:MD5是一个已被证明不安全的算法,因为它容易受到碰撞攻击,即找到不同的输入数据但产生相同的MD5哈希值。 - 建议:不应再使用MD5作为密码哈希函数或数据完整性校验的算法。 2. DES(Data Encryption Standard): - 安全性问题:DES是一个对称密钥算法,其56位密钥长度较短,易受到暴力破解攻击。此外,DES已被认为不安全,因为它的密钥空间太小。 - 建议:不应再使用DES进行加密,可以考虑使用更安全的算法,如AES(Advanced Encryption Standard)。 3. SHA-1(Secure Hash Algorithm 1): - 安全性问题:SHA-1是一个哈希算法,但它已被证明对碰撞攻击不够安全。攻击者可以通过找到两个不同的输入数据但产生相同的SHA-1哈希值来伪造数据。 - 建议:不应再使用SHA-1作为密码哈希函数或数据完整性校验的算法,而应选择更安全的哈希算法,如SHA-256或SHA-3。 4. RSA(Rivest-Shamir-Adleman): - 安全性问题:RSA是一种非对称密钥算法,其安全性取决于大素数的难度。然而,如果RSA密钥长度选择不当,可能容易受到因子分解攻击。 - 建议:为了提高RSA的安全性,应选择足够长的密钥长度,通常推荐使用2048位或更长的RSA密钥。 总的来说,使用过时或不安全的密码学算法可能导致安全问题。在设计和实施安全系统时,应选择更安全和强大的算法,并遵循最佳实践来保护数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值