`
菜鸟2号
  • 浏览: 6887 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

用Java的security包生成摘要

    博客分类:
  • J2SE
阅读更多

贴代码,主要备忘一下直接对文件摘要的写法。

package digest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class DigestUtil {

	private static int BUFFERSIZE = 4096;

	@SuppressWarnings("unused")
	public static byte[] digestFile(String filepath, String algorithm)
			throws NoSuchAlgorithmException, FileNotFoundException, IOException {
		byte[] fileDigestBytes;
		InputStream is = new FileInputStream(new File(filepath));
		MessageDigest md = MessageDigest.getInstance(algorithm);
		DigestInputStream dis = new DigestInputStream(is, md);
		byte[] temp = new byte[BUFFERSIZE];
		int len = -1;
		while ((len = dis.read(temp)) > 0)
			;
		fileDigestBytes = md.digest();
		dis.close();
		is.close();
		return fileDigestBytes;
	}

	public static byte[] digestBytes(byte[] message, String algorithm)
			throws NoSuchAlgorithmException {
		MessageDigest messagedigest = MessageDigest.getInstance(algorithm);
		messagedigest.update(message);
		return messagedigest.digest();
	}

	public static String toHexString(byte byteArr[]) {
		StringBuilder strBuilder = new StringBuilder();
		for (int i = 0; i < byteArr.length; i++) {
			String strHex = Integer.toHexString(byteArr[i] & 0xff);
			if (strHex.length() == 1) {
				strBuilder.append("0");
			}
			strBuilder.append(strHex);
			if (i < byteArr.length - 1) {
				strBuilder.append(":");
			}
		}
		return strBuilder.toString();
	}

}

 测试

package digest;

import static org.junit.Assert.*;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;

import org.junit.Test;

public class TestDigestUtil {
	@Test
	public void testDigestFile() {
		byte[] expected = { -116, 30, 12, -4, -114, 79, -37, 99, -124, 46,
				-101, -75, -64, -14, -56, -117 };
		byte[] target = null;
		try {
			target = DigestUtil.digestFile("C:\\Android中文文档.pdf", "MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		assertArrayEquals(expected, target);
	}

	@Test
	public void testDigestBytes() {
		byte[] byteMessage = { 77, 68, 53, 58, 32, 56, 67, 49, 69, 48, 67, 70,
				67, 56, 69, 52, 70, 68, 66, 54, 51, 56, 52, 50, 69, 57, 66, 66,
				53, 67, 48, 70, 50, 67, 56, 56, 66, 13, 10, 77, 68, 53, 58, 32,
				56, 67, 49, 69, 48, 67, 70, 67, 56, 69, 52, 70, 68, 66, 54, 51,
				56, 52, 50, 69, 57, 66, 66, 53, 67, 48, 70, 50, 67, 56, 56, 66,
				61, 61, 61, 13, 10, 77, 68, 53, 58, 32, 56, 67, 49, 69, 48, 67,
				70, 67, 56, 69, 52, 70, 68, 66, 54, 51, 56, 52, 50, 69, 57, 66,
				66, 53, 67, 48, 70, 50, 67, 56, 56, 66, 45, 45, 45, 45, 45, 45,
				13, 10, 13, 10, 83, 72, 65, 49, 58, 32, 51, 55, 57, 56, 68, 70,
				55, 67, 70, 65, 68, 70, 57, 48, 57, 69, 67, 54, 68, 67, 69, 51,
				69, 49, 69, 67, 52, 52, 69, 54, 48, 48, 66, 57, 53, 53, 56, 65,
				50, 57, 13, 10, 83, 72, 65, 49, 58, 32, 51, 55, 57, 56, 68, 70,
				55, 67, 70, 65, 68, 70, 57, 48, 57, 69, 67, 54, 68, 67, 69, 51,
				69, 49, 69, 67, 52, 52, 69, 54, 48, 48, 66, 57, 53, 53, 56, 65,
				50, 57, 61, 61, 61, 13, 10, 83, 72, 65, 49, 58, 32, 51, 55, 57,
				56, 68, 70, 55, 67, 70, 65, 68, 70, 57, 48, 57, 69, 67, 54, 68,
				67, 69, 51, 69, 49, 69, 67, 52, 52, 69, 54, 48, 48, 66, 57, 53,
				53, 56, 65, 50, 57, 45, 45, 45, 45, 45, 45, 13, 10 };
		byte[] expected = { -14, 68, 120, 16, -108, 71, 91, 84, 8, -61, 35,
				-78, -60, -35, 41, -49 };
		byte[] target = null;
		try {
			target = DigestUtil.digestBytes(byteMessage, "MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		assertArrayEquals(expected, target);
	}

	@Test
	public void testToHexString() {
		String expected = "8c:1e:0c:fc:8e:4f:db:63:84:2e:9b:b5:c0:f2:c8:8b";
		byte[] byteMge = { -116, 30, 12, -4, -114, 79, -37, 99, -124, 46, -101,
				-75, -64, -14, -56, -117 };
		assertEquals(expected, DigestUtil.toHexString(byteMge));
	}
}
 
分享到:
评论

相关推荐

    深入理解Android之Java Security

    在 Java Security 中,Message Digest 接口定义了如何创建和使用不同的摘要算法(如 MD5、SHA-1、SHA-256 等)。 - **Digital Signature (数字签名)**:数字签名是一种安全机制,用于确认发送者的身份并确保数据在...

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

    Java的`java.security.cert`包提供了解析和验证X.509证书的功能。对于国密算法,你需要确保证书符合国密标准,并且可以使用支持国密的证书库进行解析和验证。 在实际应用中,这些国密算法和相关功能通常会结合使用...

    JAVA生成MD5校验码

    在IT行业中,MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,它可以将任意长度的数据转化为固定长度的128位(16字节)摘要,通常以32位十六进制数的形式表示。这个过程是不可逆的,也就是说,从MD5值...

    java源码资源Java生成密钥的实

    生成的密钥通常存储在`java.security.Key`对象中,或对于非对称加密的公钥和私钥则分别存储在`java.security.PublicKey`和`java.security.PrivateKey`对象中。 密钥生成后,可以用于加密数据,或者使用私钥进行数字...

    JAVA 生成文件的MD5码

    在Java中,我们可以使用`java.security.MessageDigest`类来计算文件的MD5哈希值。以下是一个简单的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.security.MessageDigest;...

    Java 数字签名、数字证书生成源码.rar

    本资源包含的Java代码工具包提供了生成数字签名和数字证书的源码,这有助于开发者快速理解和实现相关功能。 首先,让我们了解一下数字签名。数字签名是一种用于验证电子文档完整性和发送者身份的技术。它利用非对称...

    关于java安全的程序和文档.rar_java security_java 安全_key

    7. **Java加密API(JCA)和Java加密扩展(JCE)**:提供了一套标准的接口和实现,用于加密、解密、消息摘要以及密钥管理等任务,是Java安全体系的重要组成部分。 8. **密钥管理**:在"The Key to Security"项目中,...

    MD5.zip_java security

    MD5是一种广泛使用的哈希函数,全称为Message-Digest Algorithm 5,主要用于生成一个固定长度的数字摘要,通常用于验证数据的完整性和真实性。在Java中,`java.security`包提供了一组API来实现MD5哈希计算。下面将...

    JavaSecurity:java 摘要算法,对称加密,非对称加密算法

    在Java中,可以使用`java.security`包下的`KeyPairGenerator`来生成密钥对,`Cipher`类来进行加密和解密操作,`MessageDigest`类来处理摘要算法,`Mac`类用于消息认证码(MAC)的计算,这些都是Java Security API的...

    JS 生成MD5值和JAVA生成MD5值,自己测试过很好用

    无论是JavaScript还是Java,只要遵循正确的编码和处理规则,两者都能生成一致的MD5摘要,从而确保数据的一致性。在实际应用中,我们应确保所有涉及MD5计算的部分都进行充分的测试,确保在不同环境下的一致性。

    java实现数字签名

    以下是一个简单的Java代码示例,展示了如何使用Java Security API生成数字签名: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.MessageDigest; import ...

    Java 生成校验码及校验码判断

    2. **MessageDigest**:对于更复杂的校验码,如MD5或SHA,可以使用`java.security.MessageDigest`类。首先需要实例化对应的算法,然后更新数据,最后获取校验码的字节数组。 ```java MessageDigest md = ...

    spring-security-digest:spring-security 与摘要认证示例

    服务器同样使用这些信息生成摘要,并与客户端提供的摘要进行比较,如果匹配则认证成功。 在 Spring Security 中实现摘要认证,我们需要遵循以下步骤: 1. **配置 Spring Security**:首先,我们需要在 Spring Boot...

    java_security原理[整理].pdf

    Java的`java.security.KeyPairGenerator`和`java.security.Signature`类分别用于生成密钥对和执行签名操作。 ECC(Elliptic Curves Cryptography)是非对称加密的一种高效形式,提供相同安全性的同时,密钥长度更短...

    Java加密算法学习笔记的源码包

    Java中的`java.security`包提供`KeyPairGenerator`和`KeyPair`接口来生成公钥和私钥对,`Cipher`类则用于公钥加密和私钥解密。 5. **数字签名算法**: 数字签名是基于非对称加密的一种安全机制,用于验证数据的完整...

    java good java good

    根据提供的文件信息,我们可以推断出此文档与Java编程语言中的MD5加密技术有关,特别是与实现基于RSA Data Security, Inc.提交给IETF的RFC 1321中的KeyBean消息摘要算法有关。虽然提供的内容较为杂乱,但我们可以...

    java加密工具包AES SHA SHA1 SHA256 BASEENCODE64

    在实际应用中,根据业务需求,我们可能需要结合使用这些算法,例如,先用AES加密数据,然后用SHA家族的哈希函数生成一个摘要,以确保数据在传输过程中不被篡改。而Base64编码则通常用于在网络上传输加密后的数据,...

    Java实现 sm 2 3 4 加密解密签名验签工具包

    在Java中,可以使用`java.security.MessageDigest`类来实现SM3的哈希计算,通过实例化并调用`digest()`方法。这个过程常用于数据完整性校验,防止数据被篡改。 再者,SM4是一种分组密码算法,主要用于块加密,其...

    解决java和net之间SHA256withRSA签名问题

    在Java中,我们可以使用`java.security.Signature`类来实现SHA256withRSA签名。以下是一段示例代码: ```java import java.security.*; public class JavaSigner { public static void main(String[] args) ...

    ws-security jar

    【标题】"ws-security jar" 是一个与Web服务安全相关的Java库,主要用于实现Web服务的安全标准,如WS-Security(Web Services Security)。在Web服务的世界里,安全性是至关重要的,因为它们经常涉及到跨网络的数据...

Global site tag (gtag.js) - Google Analytics