`

java数字签名三种方式

    博客分类:
  • java
阅读更多
以下3钟数字签名都是基于jdk7的
1,RSA
String password="test";
			// 1.初始化密钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
			keyPairGenerator.initialize(512);
			KeyPair keyPair = keyPairGenerator.generateKeyPair();
			RSAPublicKey rsaPublicKey = (RSAPublicKey)keyPair.getPublic();
			RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate();
			
			// 2.进行签名
			PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
			KeyFactory keyFactory = KeyFactory.getInstance("RSA");
			PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			Signature signature = Signature.getInstance("MD5withRSA");
			signature.initSign(privateKey);
			signature.update(password.getBytes());
			byte[] result = signature.sign();
			//System.out.println("jdk rsa sign:" + Hex.encodeHexString(result) );
			
			// 3.验证签名
			X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			signature = Signature.getInstance("MD5withRSA");
			signature.initVerify(publicKey);
			signature.update(password.getBytes());
			boolean bool = signature.verify(result);

2,DSA
String password="test";
			// 1.初始化密钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
			keyPairGenerator.initialize(512);
			KeyPair keyPair = keyPairGenerator.generateKeyPair();
			DSAPublicKey dsaPublicKey = (DSAPublicKey)keyPair.getPublic();
			DSAPrivateKey dsaPrivateKey = (DSAPrivateKey)keyPair.getPrivate();
			
			// 2.进行签名
			PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
			KeyFactory keyFactory = KeyFactory.getInstance("DSA");
			PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			Signature signature = Signature.getInstance("SHA1withDSA");
			signature.initSign(privateKey);
			signature.update(password.getBytes());
			byte[] result = signature.sign();
			System.out.println("jdk dsa sign:" + Hex.encodeHexString(result) );
			
			// 3.验证签名
			X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("DSA");
			PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			signature = Signature.getInstance("SHA1withDSA");
			signature.initVerify(publicKey);
			signature.update(password.getBytes());
			boolean bool = signature.verify(result);

3,ECDSA
String password="test";
			// 1.初始化密钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
			keyPairGenerator.initialize(256);
			KeyPair keyPair = keyPairGenerator.generateKeyPair();
			ECPublicKey ecPublicKey = (ECPublicKey)keyPair.getPublic();
			ECPrivateKey ecPrivateKey = (ECPrivateKey)keyPair.getPrivate();
			
			// 2.进行签名
			PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());
			KeyFactory keyFactory = KeyFactory.getInstance("EC");
			PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			Signature signature = Signature.getInstance("SHA1withECDSA");
			signature.initSign(privateKey);
			signature.update(password.getBytes());
			byte[] result = signature.sign();
			System.out.println("jdk ecdsa sign:" + Hex.encodeHexString(result) );
			
			// 3.验证签名
			X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("EC");
			PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			signature = Signature.getInstance("SHA1withECDSA");
			signature.initVerify(publicKey);
			signature.update(password.getBytes());
分享到:
评论

相关推荐

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

    Java数字签名就是一种强大的工具,它可以提供对XML文件的保护,确保数据在传输过程中的安全性。 数字签名的基本概念是利用公钥和私钥体系,发送者使用私钥对XML文档进行签名,接收者则使用发送者的公钥验证签名。...

    java数字签名(签名生成,用证书验证签名)

    "java数字签名(签名生成,用证书验证签名)" java数字签名是指使用公钥加密技术,通过证书认证和签名验证来确保数据的安全和可靠性。数字签名的生成和验证过程 涉及到证书的申请、颁发和验证等多个方面。 在数字...

    JAVA数字签名程序

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

    java数字签名源程序

    Java数字签名源程序是用于实现数据完整性、身份验证和非否认性的关键技术,它在网络安全中扮演着重要角色。本程序是使用JAVA编程语言编写的,遵循了计算机科学中关于密码学的基本原理。数字签名通常与公钥基础设施...

    java数字签名

    Java数字签名是一种在Java编程环境中实现的网络安全技术,主要用于确保数据的完整性和发送者的身份验证。这个资源包含的代码示例应该提供了关于如何在Java中实施数字签名的详细步骤。 在计算机网络中,数字签名是一...

    java数字签名的讲解

    Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一...

    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 Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供的API来实现...

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

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

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

    数字签名是一种用于验证电子信息完整性和发送者身份的技术。它结合了非对称加密算法(如RSA)和哈希函数。在Java中,我们可以使用`java.security`包中的`Signature`类来生成和验证数字签名。签名过程包括:首先,...

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

    数字签名是一种用于验证电子文档完整性和发送者身份的技术。它利用非对称加密算法,如RSA或DSA,将消息摘要与发送者的私钥结合,形成一个不可篡改的签名。在Java中,`java.security.Signature`类提供了数字签名的...

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

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

    id_digital.rar_java 数字签名_数字签名_数字签名 java

    这个“id_digital.rar”压缩包包含了与Java数字签名相关的源代码文件,可以帮助我们理解并实践这一技术。 首先,我们来看“GenerateKeyPair.java”。这个文件通常包含用于生成公钥和私钥对的代码。在数字签名中,...

    java写的数字签名

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

    Certificate_java_java数字签名_java签名证书_数字证书_

    Java数字签名是基于非对称加密算法(如RSA、DSA)的一种安全机制,用于确保数据的完整性和来源的不可否认性。在Java中,`java.security.Signature`类提供了数字签名的API。签名过程涉及使用私钥对数据进行操作,而...

    java 数字签名 证书加载

    总的来说,Java数字签名和证书加载是保障网络通信安全的重要手段,它们为数据交换提供了可靠的身份验证和完整性保护。本项目提供了一个实现这些功能的基础框架,开发者可以根据自身需求进行扩展和定制,以满足特定的...

Global site tag (gtag.js) - Google Analytics