`

生成公钥和私钥

阅读更多
package com.msserver.core.util;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;

public class SecurityUtil {
 
	/**
	 * 生成公钥和私钥
	 * @param SignaturePassword  this is your password or keyWord
	 */
	@SuppressWarnings("unused")
	public static void createkey(String signaturePassword) throws Exception{
		
		java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");

		//如果设定随机产生器就用如下代码初始化
		SecureRandom secrand=new SecureRandom();
		
		if(null != signaturePassword && !signaturePassword.equals("")){
			//对签名密码进行MD5加密
			String ressignaturePassword=MD5Util.encode(signaturePassword);
			System.out.println("原密码       "+signaturePassword);
			System.out.println("MD5后的密码       "+ressignaturePassword);
			secrand.setSeed(ressignaturePassword.getBytes()); // 初始化随机产生器
		}
		
		if(null != secrand){
			keygen.initialize(512,secrand);     // 初始化密钥生成器
		}else if(null == secrand){
			//否则
			keygen.initialize(512); 
		}
		    
		//生成密钥公钥 pubkey 和私钥 prikey 
		KeyPair keys=keygen.generateKeyPair(); // 生成密钥组
		PublicKey pubkey=keys.getPublic(); 
		PrivateKey prikey=keys.getPrivate();
		
		    
		//分别保存在 myprikey.dat 和 mypubkey.dat 中 , 以便下次不在生成生成密钥对的时间比较长
		java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(
		    new java.io.FileOutputStream("F:/myprikey.key"));//私钥保存
		out.writeObject(prikey); 
		out.close(); 
		out=new java.io.ObjectOutputStream(
				new java.io.FileOutputStream("F:/mypubkey.key"));//公钥保存
		out.writeObject(pubkey); 
		out.close();
	}
	
	/**
	 * 使用私钥对信息加密
	 */
	public static void  privateEncode(String myinfo) throws Exception{
		java.io.ObjectInputStream in=new java.io.ObjectInputStream(
			    new java.io.FileInputStream("F:/myprikey.key")); 
			PrivateKey myprikey=(PrivateKey)in.readObject(); 
			in.close(); 
			//初始一个 Signature 对象 , 并用私钥对信息签名
			java.security.Signature signet=java.security.Signature.getInstance("DSA"); 
			signet.initSign(myprikey); 
			signet.update(myinfo.getBytes()); 
			byte[] signed=signet.sign(); 
            
			System.out.println("私钥签名前的信息      "+myinfo);
			System.out.println("私钥签名后的信息       "+signed);
			
			//把信息和签名保存在一个文件中 (myinfo.dat) 
			java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(
			    new java.io.FileOutputStream("F:/myinfo.dat")); 
			out.writeObject(myinfo); 
			out.writeObject(signed); 
			out.close(); 
	}
	/**
	 * 公钥  验证      私钥  签名后的信息
	 * @throws Exception 
	 */
	public static void validate() throws Exception{
		
		//拿到公钥
		java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("F:/mypubkey.key")); 
		PublicKey pubkey=(PublicKey)in.readObject(); 
		in.close();
		
		//读入签名和信息
		in=new java.io.ObjectInputStream(new java.io.FileInputStream("F:/myinfo.dat")); 
		String info=(String)in.readObject(); 
		byte[] signed=(byte[])in.readObject(); 
		in.close();
		
		//初始一个 Signature 对象 , 并用公钥和签名进行验证 
		java.security.Signature signetcheck=java.security.Signature.getInstance("DSA"); 
		signetcheck.initVerify(pubkey); 
		signetcheck.update(info.getBytes()); 
		if (signetcheck.verify(signed)) { 
			System.out.println("签名正常     √");
	    }else{
	    	System.out.println("签名异常      ×");
	    }
	}
	
	public static void main(String[] args) throws Exception {
		createkey("6666662xVVVVxxBxx");//创建公钥和私钥
		//privateEncode("这是我的密码为8888888");//私钥对信息进行加密
		validate();
	}
}
分享到:
评论

相关推荐

    RSA生成公钥私钥和使用公钥私钥加密解密demo

    本示例提供了一个RSA加密工具类,用于生成公钥和私钥,并使用它们进行加密和解密操作,这对于保护数据库中的敏感信息,如密码,是非常必要的。 1. **RSA算法原理**: RSA算法基于数论中的大数因子分解难题。其基本...

    Java 公钥和私钥加密解密代码

    以下是一个简单的Java代码示例,演示了如何生成公钥和私钥对,并使用它们进行加密和解密: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; ...

    Java实现RSA生成公钥私钥

    在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security.KeyPairGenerator`类。但是,根据你的描述,这里提供的代码是不直接依赖API,而是通过数学计算来...

    基于golang实现非对称密钥生成项目源代码,使用rsa生成公钥和私钥,使用私钥进行信息签名,公钥验证结果

    基于golang实现非对称密钥生成项目源代码,使用rsa生成公钥和私钥,使用私钥进行信息签名,公钥验证结果

    java中使用公钥加密私钥解密原理实现license控制

    在 KeyGenerater 类中,我们使用 Java 的 KeyPairGenerator 类来生成公钥和私钥对,然后使用 Base64 对公钥和私钥进行编码。我们可以使用 SecureRandom 类来初始化随机数生成器,并使用 setSeed 方法来设置随机数...

    Windows版 生成RSA公钥和私钥的工具

    本文将详细讲解如何在Windows操作系统上利用OpenSSL工具生成RSA公钥和私钥。 首先,OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用...

    密钥生成工具 puttygen,windows系统下用于生成公钥和私钥。

    Puttygen,全称为PuTTY Key Generator,是Windows操作系统下广泛使用的工具,专门用于生成SSH(Secure Shell)的公钥和私钥对。这个工具是PuTTY套件的一部分,PuTTY是一个流行的免费终端模拟器和网络文件传输应用...

    公钥和私钥的输入程序

    在IT领域,尤其是在网络安全和加密技术中,公钥和私钥是至关重要的概念。公钥和私钥是一种非对称加密技术的基础,广泛应用于数据传输、数字签名和身份验证等场景。RSA是一种著名的公钥加密算法,由Ron Rivest、Adi ...

    支付宝获取公钥和私钥工具

    在IT行业中,尤其是在...总之,通过`openssl`工具生成公钥和私钥是支付宝实现安全交易的关键步骤。正确管理和使用这些密钥可以有效地保障用户和商家的交易安全。在实际操作中,务必遵循安全规范,确保密钥的安全性。

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...

    支付宝公钥、私钥的设置.docx

    在进行支付宝集成开发时,公钥和私钥的设置是至关重要的步骤,它们构成了安全通信的基础。本文将详细讲解如何在支付宝后台设置公钥和私钥,以及它们在支付过程中的作用。 首先,公钥和私钥是基于非对称加密技术的...

    Java公钥加密私钥解密.rar

    这个类可能包含了生成密钥对(公钥和私钥)、公钥加密、私钥解密等相关功能的方法。例如,它可能包含了`generateKeyPair()`用于生成密钥对,`encryptWithPublicKey()`用于使用公钥加密数据,以及`...

    密码学总结_公钥_私钥_数字签名_数字证书完全解析

    同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。 数字签名 数字签名是指使用私钥对信息进行加密,以证明信息的来源和完整性。数字签名的过程是:首先,使用 Hash 函数...

    JavaRSA生成公钥私钥加解密

    在这个Java RSA项目中,可能包含了一个完整的示例程序,演示如何生成公钥私钥,并进行加解密操作。这有助于理解非对称加密的工作原理,特别是在区块链等应用中,多重加密技术可能会结合RSA与其他加密方法,提供更高...

    公钥和私钥

    1. **密钥交换**:Bob首先生成一对公钥和私钥,并将公钥公开,Alice获取Bob的公钥。 2. **加密**:Alice使用Bob的公钥对消息进行加密,生成密文。 3. **解密**:Bob收到密文后,使用自己的私钥对其进行解密,恢复...

    离线生成EOS公钥和私钥

    离线生成EOS公钥和私钥,下载附件解压后直接打开PrivateWiftoPubkey.html这个文件即可生成EOS的公钥和私钥。(注意断网后运行,避免私钥触网!)

    获取RSA公钥+私钥

    在Java中,我们可以使用Java Cryptography Extension (JCE) 库来生成和操作RSA密钥对,包括公钥和私钥。 生成RSA公钥和私钥的基本步骤如下: 1. **创建KeyPairGenerator对象**:首先,我们需要创建一个...

    Java加密算法-公钥加密私钥解密

    `KeyPairGenerator`用于生成公钥和私钥对,`KeyPair`用于存储公钥和私钥。 3. **生成密钥对** 在Java中,我们可以使用`KeyPairGenerator`类的`getInstance()`方法指定加密算法(如RSA),然后调用`generateKeyPair...

    openssl工具(RSA网络通信加密,需要的,生成公钥私钥)

    "openssl工具(RSA网络通信加密,需要的,生成公钥私钥)" 这个标题提到了两个关键概念,一个是`openssl`工具,另一个是`RSA`加密算法,主要用于在网络通信中生成公钥和私钥对。 **`openssl`工具:** `openssl`是...

    linux新增用户设置权限与生成公钥私钥.doc

    本文档主要涵盖了如何在Linux上创建新用户、设置权限,以及生成公钥和私钥这对密钥以增强安全性。 首先,我们来看如何在Linux中添加新用户。Linux提供了一个名为`useradd`的命令来创建用户账号。这个命令会更新系统...

Global site tag (gtag.js) - Google Analytics