`

DSA 加密

    博客分类:
  • java
 
阅读更多
这是关于非对称加密,其中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加密(C#读取OPENSSL生成的DSA的pem文件的秘钥)

    .NET框架中的DSA(Digital Signature Algorithm,数字签名算法)是一种基于离散对数问题的公钥加密算法,常用于数字签名和认证。在本资源中,我们关注的是如何使用C#来处理OpenSSL生成的PEM格式的DSA密钥。PEM...

    java AES,DES,3DES,RAS,DSA 加密算法实现

    Java加密技术是保护数据安全的重要工具,涉及到的主要算法有AES、DES、3DES、RSA和DSA。这些算法在信息安全领域有着广泛的应用,如数据传输、密码存储、数字签名等。以下将详细介绍这些加密算法的原理及Java中的实现...

    使用DSA加密

    在Java中,DSA加密主要依赖于`java.security`包下的类。首先,我们需要生成DSA密钥对,这可以通过`KeyPairGenerator`类实现。以下是一个生成密钥对的示例代码: ```java import java.security.KeyPair; import java...

    dsa的C++加密算法代码.zip

    在C++中实现DSA加密算法,你需要理解以下几个关键概念: 1. **参数设置**:DSA算法需要三个参数,分别是p(大素数),q(p的小素因子),和g(基于p和q的生成元)。这些参数通常由标准或权威机构提供,例如NIST提供...

    liuzhigao.rar_DSA实现_DSA算法_dsa_dsa用C实现

    描述提到“DSA加密算法的软件实现,此程序用c写成”,意味着这个压缩包内包含的是一个C语言编写的DSA算法的源代码实现,可以用于理解和学习如何在实际编程中应用DSA。 **DSA算法详解** DSA是一种非对称加密算法,...

    DSA签名算法的Java实现

    DSA(Digital Signature Algorithm)是一种基于离散对数问题的公钥密码学算法,常用于数字签名,以确保数据的完整性和发送者的身份。在Java中实现DSA签名算法,我们需要使用`java.security`包中的相关类。以下是关于...

    密码加密、解密软件(未打包成exe可执行文件)

    我这里采用的是dsa加密算法,使用时可先生成一个密钥,然后通过密钥对相应的密码进行加密,当需要这些密码的时候,用当初生成的密钥进行解密。PrivateKey文件夹放置私钥,即加密时使用的密钥;PublicKey文件夹放置的...

    dsa.zip_delphi rsa_dsa_rsa_rsa delphi

    通过这个压缩包,开发者可以学习如何在Delphi环境中实现RSA和DSA加密算法,理解这两种算法的工作原理,以及如何在实际项目中应用它们。这对于想要增强其在安全通信和数据保护领域的技能的Delphi开发者来说,是一个...

    DSA.rar_DSA在线加密_SHA DSA_dsa_dsa.RAR

    在本资源"DSA.rar_DSA在线加密_SHA DSA_dsa_dsa.RAR"中,主要涉及了DSA算法的加密与验证过程,以及与之相关的数字摘要算法MD5和SHA1。 首先,我们要理解DSA的工作原理。DSA的基本思想是,一个用户拥有两把密钥:...

    DSA编解码方法

    文件详细介绍了DSA加密解密方法,可以通过横向对比其它加解密算法

    DSAExample

    下面我们将深入探讨DSA算法以及如何使用C#实现DSA加密和哈希函数。 DSA的核心概念是基于离散对数问题的数学难题,它的主要功能包括签名生成和签名验证。签名生成过程涉及私钥,只有持有私钥的用户才能创建有效的...

    椭圆曲线加密算法及实例分析.pdf

    相比于传统的RSA或DSA加密算法,ECC能够以更短的密钥长度提供同等的安全保障,这主要得益于椭圆曲线上的离散对数问题的难度。研究表明,一个160比特的椭圆曲线密钥所能提供的安全性与1024比特的RSA或DSA密钥相当,这...

    DSA 数字签名 /C++/源代码

    DSA(Digital Signature Algorithm)是一种基于离散对数问题的公钥加密算法,广泛应用于数字签名领域,确保数据的完整性和发送者的身份验证。在本文中,我们将深入探讨DSA的原理、实现过程以及如何使用C++编写相关的...

    C#中字符串的加密可用DSA和RSA实现

    本文主要讨论了两种常见的公钥加密算法:DSA(Digital Signature Algorithm)和RSA(Rivest-Shamir-Adleman),它们都可以用于C#字符串的加密。 首先,无论是DSA还是RSA,加密前都需要将字符串转化为字节数组。这是...

    DSA.rar_DSA algorithm_DSA 源代码_DSA算法_dsa算法c_加密

    **DSA(Digital Signature Algorithm)算法详解** DSA,全称为数字签名算法,是基于离散对数问题的公钥密码体制,由美国国家标准和技术研究所(NIST)在1991年提出,主要用于数字签名,确保数据的完整性和来源的不...

    bcprov-jdk15on-1.52.jar、bcprov-ext-jdk15on-1.52.jar

    ECC是一种现代的公钥加密技术,相比传统的RSA或DSA加密算法,它在提供相同安全级别时所需的密钥长度更短,因此计算效率更高,资源消耗也相对较少。ECC适用于移动设备和其他资源受限的环境。 "bcprov-ext-jdk15on-...

    信息安全课程设计报告

    - 主要功能包括DSA加密算法的实现,公钥、私钥的管理,以及签名的生成和验证。 - 流程图详细描述了实现这些功能的具体步骤和逻辑关系。 5. **遇到的问题及解决方案**: - 选择编程语言:C++和Java都可实现,Java...

    易语言实现RSA,ECC,DES,AES,DSA算法

    在这个主题中,我们将深入探讨如何在易语言中实现几种重要的加密算法:RSA,ECC,DES,AES以及DSA。 **RSA** 是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。在RSA中,数据使用...

Global site tag (gtag.js) - Google Analytics