这是关于非对称加密,其中RSA算法最为广泛和经典,利用java类库生成 公钥和私钥。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
public class RCEncrypt {
KeyPairGenerator kpg;
KeyPair kp;
PublicKey public_key;
PrivateKey private_key;
FileOutputStream public_file_out;
ObjectOutputStream public_object_out;
FileOutputStream private_file_out;
ObjectOutputStream private_object_out;
//测试
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
// 生成公钥和私钥,同时以文件形式保存
RCEncrypt encrypt = new RCEncrypt(512,"E:\\");
//加密
String rc_dby = RCEncrypt.encrypt_with_public_key("dby", "E:\\rc_public_key.bat");
System.out.println(rc_dby);
//解密
String dby = RCEncrypt.decrypt_with_private_key(rc_dby, "E:\\rc_private_key.bat");
System.out.println(dby);
}
public RCEncrypt(int in,String address) throws NoSuchAlgorithmException, IOException{
//创建“密钥对”生成器
kpg = KeyPairGenerator.getInstance("RSA");
//指定密钥长度(512-2048)
kpg.initialize(in);
//生成“密钥对”,其中一个公钥和一个私钥的信息
kp = kpg.genKeyPair();
//获得公钥
public_key = kp.getPublic();
//获得私钥
private_key = kp.getPrivate();
//保存公钥
public_file_out = new FileOutputStream(address+"/rc_public_key.bat");
public_object_out = new ObjectOutputStream(public_file_out);
public_object_out.writeObject(public_key);
//保存私钥
private_file_out = new FileOutputStream(address+"/rc_private_key.bat");
private_object_out = new ObjectOutputStream(private_file_out);
private_object_out.writeObject(private_key);
}
// 读取密钥,对信息,进行加密
public static String encrypt_with_public_key(String message,String public_key_file) {
try{
File pu_f = new File(public_key_file);
FileInputStream pu_in = new FileInputStream(pu_f);
ObjectInputStream pu_objectin = new ObjectInputStream(pu_in);
RSAPublicKey pu_enKey = (RSAPublicKey) pu_objectin.readObject();
Cipher cipher = Cipher.getInstance("RSA");
//以加密模式初始化密钥
cipher.init(Cipher.ENCRYPT_MODE, pu_enKey);
//生成密文
byte[] miwen = cipher.doFinal(message.getBytes());
return new BigInteger(miwen).toString();
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
//读取私钥,对信息进行解密
public static String decrypt_with_private_key(String s,String private_key_file){
try {
byte[] miwen = new BigInteger(s).toByteArray();
//读入解密用的私钥
File pr_f = new File(private_key_file);
FileInputStream pr_in = new FileInputStream(pr_f);
//以解密模式初始化密钥
Cipher cipher = Cipher.getInstance("RSA");
ObjectInputStream pr_objectin = new ObjectInputStream(pr_in);
RSAPrivateKey pr_enkey = (RSAPrivateKey) pr_objectin.readObject();
cipher.init(Cipher.DECRYPT_MODE, pr_enkey);
//解密获取明文
byte[] result = cipher.doFinal(miwen);
String r = new String(result);
return r;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
.NET框架中的DSA(Digital Signature Algorithm,数字签名算法)是一种基于离散对数问题的公钥加密算法,常用于数字签名和认证。在本资源中,我们关注的是如何使用C#来处理OpenSSL生成的PEM格式的DSA密钥。PEM...
Java加密技术是保护数据安全的重要工具,涉及到的主要算法有AES、DES、3DES、RSA和DSA。这些算法在信息安全领域有着广泛的应用,如数据传输、密码存储、数字签名等。以下将详细介绍这些加密算法的原理及Java中的实现...
在Java中,DSA加密主要依赖于`java.security`包下的类。首先,我们需要生成DSA密钥对,这可以通过`KeyPairGenerator`类实现。以下是一个生成密钥对的示例代码: ```java import java.security.KeyPair; import java...
在C++中实现DSA加密算法,你需要理解以下几个关键概念: 1. **参数设置**:DSA算法需要三个参数,分别是p(大素数),q(p的小素因子),和g(基于p和q的生成元)。这些参数通常由标准或权威机构提供,例如NIST提供...
描述提到“DSA加密算法的软件实现,此程序用c写成”,意味着这个压缩包内包含的是一个C语言编写的DSA算法的源代码实现,可以用于理解和学习如何在实际编程中应用DSA。 **DSA算法详解** DSA是一种非对称加密算法,...
DSA(Digital Signature Algorithm)是一种基于离散对数问题的公钥密码学算法,常用于数字签名,以确保数据的完整性和发送者的身份。在Java中实现DSA签名算法,我们需要使用`java.security`包中的相关类。以下是关于...
我这里采用的是dsa加密算法,使用时可先生成一个密钥,然后通过密钥对相应的密码进行加密,当需要这些密码的时候,用当初生成的密钥进行解密。PrivateKey文件夹放置私钥,即加密时使用的密钥;PublicKey文件夹放置的...
通过这个压缩包,开发者可以学习如何在Delphi环境中实现RSA和DSA加密算法,理解这两种算法的工作原理,以及如何在实际项目中应用它们。这对于想要增强其在安全通信和数据保护领域的技能的Delphi开发者来说,是一个...
在本资源"DSA.rar_DSA在线加密_SHA DSA_dsa_dsa.RAR"中,主要涉及了DSA算法的加密与验证过程,以及与之相关的数字摘要算法MD5和SHA1。 首先,我们要理解DSA的工作原理。DSA的基本思想是,一个用户拥有两把密钥:...
文件详细介绍了DSA加密解密方法,可以通过横向对比其它加解密算法
下面我们将深入探讨DSA算法以及如何使用C#实现DSA加密和哈希函数。 DSA的核心概念是基于离散对数问题的数学难题,它的主要功能包括签名生成和签名验证。签名生成过程涉及私钥,只有持有私钥的用户才能创建有效的...
相比于传统的RSA或DSA加密算法,ECC能够以更短的密钥长度提供同等的安全保障,这主要得益于椭圆曲线上的离散对数问题的难度。研究表明,一个160比特的椭圆曲线密钥所能提供的安全性与1024比特的RSA或DSA密钥相当,这...
DSA(Digital Signature Algorithm)是一种基于离散对数问题的公钥加密算法,广泛应用于数字签名领域,确保数据的完整性和发送者的身份验证。在本文中,我们将深入探讨DSA的原理、实现过程以及如何使用C++编写相关的...
本文主要讨论了两种常见的公钥加密算法:DSA(Digital Signature Algorithm)和RSA(Rivest-Shamir-Adleman),它们都可以用于C#字符串的加密。 首先,无论是DSA还是RSA,加密前都需要将字符串转化为字节数组。这是...
**DSA(Digital Signature Algorithm)算法详解** DSA,全称为数字签名算法,是基于离散对数问题的公钥密码体制,由美国国家标准和技术研究所(NIST)在1991年提出,主要用于数字签名,确保数据的完整性和来源的不...
ECC是一种现代的公钥加密技术,相比传统的RSA或DSA加密算法,它在提供相同安全级别时所需的密钥长度更短,因此计算效率更高,资源消耗也相对较少。ECC适用于移动设备和其他资源受限的环境。 "bcprov-ext-jdk15on-...
- 主要功能包括DSA加密算法的实现,公钥、私钥的管理,以及签名的生成和验证。 - 流程图详细描述了实现这些功能的具体步骤和逻辑关系。 5. **遇到的问题及解决方案**: - 选择编程语言:C++和Java都可实现,Java...
在这个主题中,我们将深入探讨如何在易语言中实现几种重要的加密算法:RSA,ECC,DES,AES以及DSA。 **RSA** 是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。在RSA中,数据使用...