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();
分享到:
相关推荐
MD5和SHA1校验码验证器 用于验证软件的MD5和SHA1值是否正确。
SHA256校验的小工具 可以检查文件是否改动
此资源主要是实现Java中的SHA1加密方式,将资源下载后直接在程序中复制即可使用。
可以使用该工具获取APP正确的包名和SHA1值 用来解决AK码验证错误问题,安装android sha1 安全码校政app后,它会加载手机所有的应用,选择你要的app,会得到这个App的SHA1值,点击右下角的复制即可
使用Java开发的桌面应用程序,可用于查看字符串和文件的校验码。支持MD5、SHA1和CRC32三种校验算法。
可以用来校验下载文件的SHA1码与MD5码,非常实用的一个小工具,希望大家喜欢。
hash sha1 校验工具 (windows 7 校验)
JAVA SHA1加密算法,适合微信支付签名用
C#编写的文件校验码查看器,将文件拖入窗口即可计算,校验算法包括MD5、SHA1、SHA256、SHA384、SHA512、CRC32。
MD5和SHA1校验工具可以检验下载的软件是否被恶意篡改过,防止下载到含有病毒木马的软件,另可以支持其他多种校验算法,如SHA256、SHA384和SHA512
MD5 SHA1校验工具Hash,校验软件
通过命令行方式生成或校验文件的md5或sha1。部分网友反应windows 7下不可用。通过命令行方式生成或校验文件的md5或sha1。部分网友反应windows 7下不可用。通过命令行方式生成或校验文件的md5或sha1。部分网友反应...
迷你MD5,SHA1校验工具,并带比对功能
关于SHA1的一个加密文件,以java语言写的,希望对大家有用
java实现SHA1、SHA、MD5、AES加密、AES解密、BASE64解密、BASE64加密,以及apache BASE64 jar和源码
通过Java实现sha-1加密算法的加解密
本工具用于计算文本或文件的校验码(计算文件的消息摘要), 目前系统支持MD5(128位)/SHA1(160位) /SHA256(256位)/SHA384(384位)/SHA512(512位)/RIPEMD160(160位)算法. 简单地理解, 可以认为, 消息摘要算法就是将一...
用java原生的摘要实现SHA256加密
SHA1校验DoS程序,使用开源SHA1加密,http://www.codeproject.com/Articles/2463/CSHA1-A-C-Class-Implementation-of-the-SHA-1-Hash-A
java实现hash sha1