`
只是随手瞎打
  • 浏览: 28079 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

RSA 加密小例子

 
阅读更多
加密类:
package com.test.Utils;

import it.sauronsoftware.base64.Base64;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

public class RSAJiaMi {
public static String src = "hello world";
/**
* 加密
*/
public void pubENpriDE() {

try {
FileInputStream f = new FileInputStream("pubkey2.dat");
ObjectInputStream b = new ObjectInputStream(f);
RSAPublicKey rsaPublicKey = (RSAPublicKey) b.readObject();
// 2.公钥加密,私钥解密----加密
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(
rsaPublicKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
// 初始化加密
// Cipher类为加密和解密提供密码功能,通过getinstance实例化对象
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 加密字符串
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("公钥加密,私钥解密----加密:"
+ new String(Base64.encode(result), "utf-8"));
File file = new File("encrypt.dat");
FileOutputStream fos = new FileOutputStream(file);
fos.write(result);
b.close();
f.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}

解密类:
package com.test.Utils;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;

import javax.crypto.Cipher;

public class RSAJieMi {
/**
* 解密
*
* @throws Exception
*/
public String pubENpriDE2()  {
try{
File f = new File("encrypt.dat");
if (!f.exists()) {
throw new FileNotFoundException("encrypt.dat");
}

ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());
BufferedInputStream in = null;
in = new BufferedInputStream(new FileInputStream(f));
int buf_size = 1024;
byte[] buffer = new byte[buf_size];
int len = 0;
while (-1 != (len = in.read(buffer, 0, buf_size))) {
bos.write(buffer, 0, len);
}


KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA");
// 3.公钥加密,私钥解密-----解密
FileInputStream f3 = new FileInputStream("privatekey2.dat");
ObjectInputStream b3 = new ObjectInputStream(f3);
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) b3.readObject();
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(
rsaPrivateKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
// 初始化解密
cipher.init(Cipher.DECRYPT_MODE, privateKey);
// 解密字符串
byte[] result2 = cipher.doFinal(bos.toByteArray());
bos.close();
in.close();
f3.close();
b3.close();
System.out.println("公钥加密,私钥解密-----解密:" + new String(result2));
return new String(result2,"utf-8");
}catch(Exception e){
e.printStackTrace();
return null;
}

}
}
生成密钥类:
package com.test.Utils;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class RSAPubPri {

public static void generateKey() {

try {
// 1.初始化秘钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator
.getInstance("RSA");
// 秘钥长度
keyPairGenerator.initialize(2048);
// 初始化秘钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 公钥
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
// 私钥
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
// 保存公钥
FileOutputStream f1 = new FileOutputStream("pubkey2.dat");
ObjectOutputStream b1 = new ObjectOutputStream(f1);
b1.writeObject(rsaPublicKey);
// 保存私钥
FileOutputStream f2 = new FileOutputStream("privatekey2.dat");
ObjectOutputStream b2 = new ObjectOutputStream(f2);
b2.writeObject(rsaPrivateKey);
f1.close();
b1.close();
f2.close();
b2.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}
测试类:
package com.test.test;

import com.test.Utils.RSAJiaMi;
import com.test.Utils.RSAJieMi;
import com.test.Utils.RSAPubPri;



public class RSAtest {
public static void main(String[] args) { 
RSAPubPri pubPri = new RSAPubPri();
//生成密钥对
//pubPri.generateKey();
RSAJiaMi jiaMi = new RSAJiaMi();
//jiaMi.pubENpriDE();
RSAJieMi jieMi = new RSAJieMi();
jieMi.pubENpriDE2();
}
}
分享到:
评论

相关推荐

    RSA加密示例

    RSA加密算法是信息安全领域的重要组成部分,其基于数学原理的非对称加密方式为数据传输和网络安全提供了坚实的保障。尽管该算法在信息安全领域应用广泛,但对于初学者而言,复杂的代码和抽象的数学概念往往构成理解...

    C#RSA加密解密签名和验证签名的小例子

    C#RSA加密解密签名和验证签名的小例子,代码都加了注释,可以很容易看懂.如果应用到消息收发,发送方用公钥加密,接收方用私钥解密.如果是应用到软件注册方面,则需要客户端保留公钥,程序开发者保留私钥.使用签名和验证...

    Android,java实现RSA加密

    RSA加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。...加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开...本资源是通过Android、java实现的RSA加密的例子,可供大家参考学习。

    Delphi(delphi7-XE)标准RSA加密,解密,签名.与C,Java,php等通用

    RSA算法是一种非对称加密...总之,Delphi提供了丰富的工具和库来支持RSA加密和签名,使得开发者能够在各种环境中安全地处理敏感数据。了解并熟练掌握RSA算法及其在Delphi中的应用,对于开发跨平台的安全应用至关重要。

    .net RSA非对称加密例子

    .NET框架提供了一种强大的安全工具,即RSA加密算法,它是一种非对称加密技术,广泛应用于数据加密、数字签名和密钥交换等...通过分析和学习这个例子,你可以更好地理解和应用RSA加密技术,以提高你的应用程序的安全性。

    RSA 加密 解密 算法

    RSA加密解密算法,相当不错的例子,适合初学者参考

    RSA加密软件 (VC++,MFC程序实现)

    RSA加密程序实现VC++ ,MFC 可以产生任意...也是学习RSA加密的好例子,可以学到很多的加密函数和加密算法,很多算法是很经典的 ,比如欧拉定理,费马定理,还有中国剩余定理等......................................

    RSA加密小列子

    这个小例子是用C++编写的,提供了一个直接可导入的工程,便于理解和应用RSA加密技术。 RSA算法的核心原理基于两个大素数的乘积难以因式分解的数学难题。下面将详细介绍RSA加密过程及其相关知识点: 1. **密钥生成*...

    rsa加密算法的java实现实例

    RSA加密算法是公钥密码学中的一个重要组成部分,它基于大数因子分解的困难性,为数据传输和存储提供安全保障。在Java中实现RSA加密需要理解其基本原理,并使用Java Cryptography Extension (JCE) 提供的相关类库。...

    使用LibTomCrypt实现RSA加密解密算法,公钥、私钥分离

    最近研究非对称算法,发现LibTomCrypt库算法完善并且方便,但网上的实现了RSA算法的并不多,有实现了RSA算法的代码,但是加密和解密使用的是一套KEY没有体现出非对称算法的概念。这段代码生成key后提取了公钥和私钥...

    用实例讲解RSA加密算法(精)

    在这篇科普小文章里,不可能对 RSA 算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解 RSA 的工作原理。 为了便于计算。在以下实例中只选取小数值的素数 p,q,以及 e,假设用户 A 需要将明文“key...

    RSA加密算法实例

    RSA加密算法是公开密钥密码学中的一个经典算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它基于大整数因子分解的困难性,使得加密过程对于不知道密钥的人来说几乎是不可能破解的。 ...

    用vc++6.0做 的RSA的加密与解密程序

    本项目是使用VC++6.0编译环境实现的RSA加密与解密程序,用户可以加载并直接运行,无需担心任何错误。 首先,我们要理解RSA的基本原理。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出的,...

    asp RSA加密

    ### ASP RSA加密技术详解 #### 一、概述 在网络安全领域,数据加密是保护信息安全的重要手段之一。其中,RSA加密算法作为非对称加密的一种,因其安全性高且应用广泛而备受青睐。本篇文章将深入探讨如何在ASP环境中...

    VC++实现的RSA加密

    总的来说,这个例子提供了一个学习如何在C++环境下结合MFC库实现RSA加密的宝贵机会。通过研究这个项目,开发者不仅可以熟悉RSA加密的原理,还能掌握如何在Windows应用程序中集成加密功能,提升自己的软件开发能力。

    DESC RSA MD5等加密解密例子

    本文将深入探讨标题"DESC RSA MD5等加密解密例子"所涉及的关键概念,包括DES、RSA、MD5和数字签名,以及它们在实际应用中的作用。 首先,DES(Data Encryption Standard)是一种经典的对称加密算法,它使用相同的...

    rsa非对称加密算法例子

    在Java中实现RSA加密算法,通常会用到`java.security`和`javax.crypto`这两个包中的类。以下是一个简单的RSA加密解密的Java实现过程: 1. **生成密钥对**:首先,我们需要生成RSA的密钥对,这可以通过`...

    Android数据加密之Rsa加密

    本文将重点介绍Android数据加密的一种方法:RSA加密。RSA是一种非对称加密算法,它使用一对密钥,即公钥和私钥,来进行加密和解密操作。 首先,了解什么是RSA加密。RSA算法由Ron Rivest、Adi Shamir和Leonard ...

    基于FPGA的12位RSA加密,解密

    基于FPGA(Field-Programmable Gate Array)实现RSA加密和解密具有高效、实时性强的优点,尤其适用于硬件加速场景。在这个项目中,我们看到一个12位的RSA系统,虽然12位相对较小,不适用于实际安全场景,但可以作为...

    c++通过openssl实现rsa加密解密【windows版】

    c++通过使用openssl实现rsa加密解密算法,网上有很多文章和例子,但是大部分都是linux版的,并且内容不全、代码老旧等各种问题,导致最后无法调试,这里提供的源码是用code::blocks编写的c++源码,可以直接运行...

Global site tag (gtag.js) - Google Analytics