`

使用java 进行数字签名

阅读更多

使用java 进行数字签名

签名算法有:

MD5withRSA

SHA1withRSA

SHA256withRSA

代码如下:

package com.common.enu;
/***
 * 签名算法.
 * @author huangwei
 * @since 2013-10-28
 */
public enum SignatureAlgorithm {
	SIGNATURE_ALGORITHM_MD5withRSA("MD5withRSA"),
	SIGNATURE_ALGORITHM_SHA1withRSA("SHA1withRSA"),
	SIGNATURE_ALGORITHM_SHA256withRSA("SHA256withRSA");
	
	private final String value;

    //构造器默认也只能是private, 从而保证构造函数只能在内部使用
	private SignatureAlgorithm(String value) {
        this.value = value;
    }
    
    public String getValue() {
        return value;
    }
}

/**
	 * use private key sign
	 * 
	 * @param message
	 *            data encrypted
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] sign(String message, PrivateKey key,
			SignatureAlgorithm algorithm) throws Exception {
		return SystemUtil.sign(message.getBytes(SystemUtil.CHARSET_ISO88591),
				key, algorithm);
	}

/**
	 * use private key sign 
	 * 
	 * @param message
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public static byte[] sign(byte[] message, PrivateKey key,
			SignatureAlgorithm algorithm) throws Exception {
		Signature signetcheck = Signature.getInstance(algorithm.getValue());
		signetcheck.initSign(key);
		signetcheck.update(message);
		return signetcheck.sign();
	}
/**
	 * use public key verify sign
	 * 
	 * @param message
	 * @param signStr
	 * @return
	 * @throws Exception
	 */
	public static boolean verifySign(byte[] message, byte[] signBytes,
			PublicKey key, SignatureAlgorithm algorithm) throws Exception {
		if (message == null || signBytes == null || key == null) {
			return false;
		}
		Signature signetcheck = Signature.getInstance(algorithm.getValue());
		signetcheck.initVerify(key);
		signetcheck.update(message);
		return signetcheck.verify(signBytes);
	}
public static boolean verifySign(byte[] message, String signStr,
			PublicKey key, SignatureAlgorithm algorithm) throws Exception {
		byte[] signBytes = toBytes(signStr);
		return verifySign(message, signBytes, key, algorithm);
	}
/***
	 * convert byte array to hex(16) bit string
	 * 
	 * @param byte[]
	 * @return hex(16) bit string
	 */
	public static String toHexString(byte[] b) {
		StringBuilder sb = new StringBuilder(b.length * 2);
		for (int i = 0; i < b.length; i++) {
			sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
			sb.append(HEXCHAR[b[i] & 0x0f]);
		}
		return sb.toString();
	}

 测试:

@Test
	public void test_sign() throws Exception {
		String message = "whuang3";
		SignatureAlgorithm algorithm = SignatureAlgorithm.SIGNATURE_ALGORITHM_SHA256withRSA;
//进行签名
		byte[] signResult = SystemUtil.sign(message, privateKey, algorithm);
		System.out.println("sign result hex:" + SystemUtil.toHexString(signResult));
//校验签名
		boolean isSuccess=SystemUtil.verifySign(message.getBytes(SystemUtil.CHARSET_ISO88591),
				signResult, publicKey, algorithm);
		System.out.println("sign1 :"+isSuccess);
		Assert.assertEquals(isSuccess, true);
	}

 参考:http://security.group.iteye.com/group/wiki/2280-Non-symmetric-encryption-Digital-Signature

工具类com.common.util.SystemUtil 见附件

 

分享到:
评论

相关推荐

    java数字签名源程序

    提供的说明文档可能包含了如何使用这个Java数字签名程序的详细步骤,包括如何生成密钥对、如何签名数据以及如何验证签名等。这有助于使用者理解程序的工作原理和实际应用。 6. **截图**: 截图可能展示了程序运行...

    Java加密和数字签名编程快速入门.rar_Java加密_java 数字 签名_java 数字签名_数字 签名_数字签名

    Java作为一种广泛使用的编程语言,提供了丰富的加密和数字签名功能来确保数据的安全传输和存储。本教程将带你快速入门Java中的加密和数字签名编程。 首先,让我们了解什么是加密。加密是一种将明文数据转化为难以...

    JAVA数字签名程序

    JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字...

    对Java Applet和Java Web Start进行数字签名

    对Java Applet和Java Web Start进行数字签名

    用Java数字签名提供XML安全.doc

    【Java数字签名提供XML安全】 XML(eXtensible Markup Language)作为一种标准的数据交换格式,在软件开发和数据传输中扮演着重要角色。然而,随着XML的广泛应用,数据的安全性问题日益凸显。为了确保XML文件的完整...

    java数字签名的讲解

    在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一、数字签名的概念 数字签名并非我们日常生活中的笔迹签名,而是一种电子形式的签名,它结合...

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

    下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...

    JavaApplet数字签名方法和打包签名工具

    本篇文章将深入探讨JavaApplet的数字签名方法以及如何使用打包签名工具JavaAutoPlug.exe来实现这一过程。 首先,理解数字签名的概念是必要的。在计算机安全领域,数字签名是对数据的一种加密验证,类似于纸质文档上...

    java 数字签名验签

    在Java中,数字签名通常使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供的API来实现。在这个项目中,我们看到它被用作二次开发的基础,意味着它提供了一个可扩展的框架,可以...

    java xml数字签名工具类

    java xml数字签名工具类 拿来就能用

    java数字签名(签名生成,用证书验证签名)[定义].pdf

    "java数字签名和证书应用" 数字签名是指使用某种签名算法对某些内容进行数字签名后得到的数字凭证。证书(Certificate)是数字签名的一种特殊形式,是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的,...

    java数字签名

    在提供的`java数字签名jar.rar`和`java数字签名.zip`文件中,可能包含了具体的示例代码,展示了如何使用Java实现这些步骤。通过查看和学习这些代码,你可以更好地理解Java中的数字签名工作原理,以及如何在实际项目...

    java写的数字签名

    通过理解和实践这个Java数字签名程序,我们可以更深入地了解数字签名的实现细节,这对于从事信息安全、区块链、加密通信等领域的工作至关重要。同时,对于Java程序员来说,熟悉这些安全相关的库和工具也能够提升他们...

    Java 数字签名和验证

    以下是一个通用的Java数字签名和验证的步骤概述: 1. 导入所需的Java加密库: ```java import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; `...

    java数字签名(可用)

    Java 数字签名是一种用于验证数据完整性和发送者身份的...总的来说,Java数字签名提供了强大的安全功能,确保了在网络通信中的数据安全和身份认证。理解并正确使用数字签名和相关工具是开发安全的Java应用程序的基础。

    Java实现的数字签名算法RSA完整示例

    Java实现的数字签名算法RSA完整示例 Java实现的数字签名算法RSA是一种常用的数字签名算法,主要用于验证数据完整性...通过学习本文,读者可以掌握数字签名算法RSA的基本知识,并了解如何使用Java实现数字签名算法RSA。

Global site tag (gtag.js) - Google Analytics