使用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数字签名程序的详细步骤,包括如何生成密钥对、如何签名数据以及如何验证签名等。这有助于使用者理解程序的工作原理和实际应用。 6. **截图**: 截图可能展示了程序运行...
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数字签名提供XML安全】 XML(eXtensible Markup Language)作为一种标准的数据交换格式,在软件开发和数据传输中扮演着重要角色。然而,随着XML的广泛应用,数据的安全性问题日益凸显。为了确保XML文件的完整...
在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一、数字签名的概念 数字签名并非我们日常生活中的笔迹签名,而是一种电子形式的签名,它结合...
下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...
本篇文章将深入探讨JavaApplet的数字签名方法以及如何使用打包签名工具JavaAutoPlug.exe来实现这一过程。 首先,理解数字签名的概念是必要的。在计算机安全领域,数字签名是对数据的一种加密验证,类似于纸质文档上...
在Java中,数字签名通常使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供的API来实现。在这个项目中,我们看到它被用作二次开发的基础,意味着它提供了一个可扩展的框架,可以...
java xml数字签名工具类 拿来就能用
"java数字签名和证书应用" 数字签名是指使用某种签名算法对某些内容进行数字签名后得到的数字凭证。证书(Certificate)是数字签名的一种特殊形式,是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的,...
在提供的`java数字签名jar.rar`和`java数字签名.zip`文件中,可能包含了具体的示例代码,展示了如何使用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实现的数字签名算法RSA完整示例 Java实现的数字签名算法RSA是一种常用的数字签名算法,主要用于验证数据完整性...通过学习本文,读者可以掌握数字签名算法RSA的基本知识,并了解如何使用Java实现数字签名算法RSA。