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加密工具类,用于生成公钥和私钥,并使用它们进行加密和解密操作,这对于保护数据库中的敏感信息,如密码,是非常必要的。 1. **RSA算法原理**: RSA算法基于数论中的大数因子分解难题。其基本...
以下是一个简单的Java代码示例,演示了如何生成公钥和私钥对,并使用它们进行加密和解密: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; ...
在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security.KeyPairGenerator`类。但是,根据你的描述,这里提供的代码是不直接依赖API,而是通过数学计算来...
基于golang实现非对称密钥生成项目源代码,使用rsa生成公钥和私钥,使用私钥进行信息签名,公钥验证结果
在 KeyGenerater 类中,我们使用 Java 的 KeyPairGenerator 类来生成公钥和私钥对,然后使用 Base64 对公钥和私钥进行编码。我们可以使用 SecureRandom 类来初始化随机数生成器,并使用 setSeed 方法来设置随机数...
本文将详细讲解如何在Windows操作系统上利用OpenSSL工具生成RSA公钥和私钥。 首先,OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用...
Puttygen,全称为PuTTY Key Generator,是Windows操作系统下广泛使用的工具,专门用于生成SSH(Secure Shell)的公钥和私钥对。这个工具是PuTTY套件的一部分,PuTTY是一个流行的免费终端模拟器和网络文件传输应用...
在IT领域,尤其是在网络安全和加密技术中,公钥和私钥是至关重要的概念。公钥和私钥是一种非对称加密技术的基础,广泛应用于数据传输、数字签名和身份验证等场景。RSA是一种著名的公钥加密算法,由Ron Rivest、Adi ...
在IT行业中,尤其是在...总之,通过`openssl`工具生成公钥和私钥是支付宝实现安全交易的关键步骤。正确管理和使用这些密钥可以有效地保障用户和商家的交易安全。在实际操作中,务必遵循安全规范,确保密钥的安全性。
本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...
在进行支付宝集成开发时,公钥和私钥的设置是至关重要的步骤,它们构成了安全通信的基础。本文将详细讲解如何在支付宝后台设置公钥和私钥,以及它们在支付过程中的作用。 首先,公钥和私钥是基于非对称加密技术的...
这个类可能包含了生成密钥对(公钥和私钥)、公钥加密、私钥解密等相关功能的方法。例如,它可能包含了`generateKeyPair()`用于生成密钥对,`encryptWithPublicKey()`用于使用公钥加密数据,以及`...
同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。 数字签名 数字签名是指使用私钥对信息进行加密,以证明信息的来源和完整性。数字签名的过程是:首先,使用 Hash 函数...
在这个Java RSA项目中,可能包含了一个完整的示例程序,演示如何生成公钥私钥,并进行加解密操作。这有助于理解非对称加密的工作原理,特别是在区块链等应用中,多重加密技术可能会结合RSA与其他加密方法,提供更高...
1. **密钥交换**:Bob首先生成一对公钥和私钥,并将公钥公开,Alice获取Bob的公钥。 2. **加密**:Alice使用Bob的公钥对消息进行加密,生成密文。 3. **解密**:Bob收到密文后,使用自己的私钥对其进行解密,恢复...
离线生成EOS公钥和私钥,下载附件解压后直接打开PrivateWiftoPubkey.html这个文件即可生成EOS的公钥和私钥。(注意断网后运行,避免私钥触网!)
在Java中,我们可以使用Java Cryptography Extension (JCE) 库来生成和操作RSA密钥对,包括公钥和私钥。 生成RSA公钥和私钥的基本步骤如下: 1. **创建KeyPairGenerator对象**:首先,我们需要创建一个...
`KeyPairGenerator`用于生成公钥和私钥对,`KeyPair`用于存储公钥和私钥。 3. **生成密钥对** 在Java中,我们可以使用`KeyPairGenerator`类的`getInstance()`方法指定加密算法(如RSA),然后调用`generateKeyPair...
"openssl工具(RSA网络通信加密,需要的,生成公钥私钥)" 这个标题提到了两个关键概念,一个是`openssl`工具,另一个是`RSA`加密算法,主要用于在网络通信中生成公钥和私钥对。 **`openssl`工具:** `openssl`是...
本文档主要涵盖了如何在Linux上创建新用户、设置权限,以及生成公钥和私钥这对密钥以增强安全性。 首先,我们来看如何在Linux中添加新用户。Linux提供了一个名为`useradd`的命令来创建用户账号。这个命令会更新系统...