RSA加密的方式和解密方式实现方法(推荐)

RSAsecurity.java

package com.mstf.rsa;

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/*RSA 工具类。提供加密,解密,生成密钥对等方法。
RSA加密原理概述
RSA的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的函数。
据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积
密钥的产生:
 1.选择两个大素数 p,q ,计算 n=p*q;
 2.随机选择加密密钥 e ,要求 e 和 (p-1)*(q-1)互质
 3.利用 Euclid 算法计算解密密钥 d , 使其满足 e*d = 1(mod(p-1)*(q-1)) (其中 n,d 也要互质)
 4:至此得出公钥为 (n,e) 私钥为 (n,d)
 RSA速度
 * 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论 是软件还是硬件实现。
 * 速度一直是RSA的缺陷。一般来说只用于少量数据 加密。*/
public class RSAsecurity {

 public static String src = "admin";

 public void priENpubDE() {

  try {
   // 初始化秘钥
   KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
   // 秘钥长度
   keyPairGenerator.initialize(1024);
   // 初始化秘钥对
   KeyPair keyPair = keyPairGenerator.generateKeyPair();
   // 公钥
   RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
   // 私钥
   RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

   // 2.私钥加密,公钥解密----加密
   // 生成私钥
   PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
   PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
   // Cipher类为加密和解密提供密码功能,通过getinstance实例化对象
   Cipher cipher = Cipher.getInstance("RSA");
   // 初始化加密
   cipher.init(Cipher.ENCRYPT_MODE, privateKey);
   byte[] result = cipher.doFinal(src.getBytes());
   System.out.println("私钥加密,公钥解密----加密:" + Base64.encode(result));

   // 3.私钥加密,公钥解密----解密
   // 生成公钥
   X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
   keyFactory = KeyFactory.getInstance("RSA");
   PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
   cipher = Cipher.getInstance("RSA");
   // 初始化解密
   cipher.init(Cipher.DECRYPT_MODE, publicKey);
   result = cipher.doFinal(result);
   System.out.println("私钥加密,公钥解密----解密:" + new String(result));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public void pubENpriDE() {
  try {
   // 1.初始化秘钥
   KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
   // 秘钥长度
   keyPairGenerator.initialize(512);
   // 初始化秘钥对
   KeyPair keyPair = keyPairGenerator.generateKeyPair();
   // 公钥
   RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
   // 私钥
   RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

   // 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("公钥加密,私钥解密----加密:" + Base64.encode(result));

   // 3.公钥加密,私钥解密-----解密
   PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
   keyFactory = KeyFactory.getInstance("RSA");
   PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
   // 初始化解密
   cipher.init(Cipher.DECRYPT_MODE, privateKey);
   // 解密字符串
   result = cipher.doFinal(result);
   System.out.println("公钥加密,私钥解密-----解密:" + new String(result));

  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
}

RSAtest.java

package com.mstf.rsa;

import com.mstf.rsa.RSAsecurity;

public class RSAtest {
 public static void main(String[] args) {
  RSAsecurity rsAsecurity = new RSAsecurity();
  System.out.println("私钥加密公钥解密例:");
  rsAsecurity.priENpubDE();
  System.out.println("公钥加密私钥解密例:");
  rsAsecurity.pubENpriDE();
 }
}

以上这篇RSA加密的方式和解密方式实现方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java AES加密解密的简单实现方法

    废话不多说,直接上代码 package com.mstf.aes; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import

  • RSA加密算法java简单实现方法(必看)

    简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码. package security; import java.security.*; import java.security.spec.*; import java.security.interfaces.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import ja

  • Java最简单的DES加密算法实现案例

    Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /** * base64编码/解码 * @author ceet * */ public class Base64 { public static String encode(String data) { return new String(encode(data.getBytes())); } public static String d

  • RSA加密的方式和解密方式实现方法(推荐)

    RSAsecurity.java package com.mstf.rsa; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.interfaces.RSAPrivateKe

  • Flask框架实现的前端RSA加密与后端Python解密功能详解

    本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username 和 password.这种传输方式有一定的安全隐患,password 可能会在传输过程中被窃听而造成用户密码的泄漏. 那么我认为解决该问题的方法是这样的:在前端页面对数据进行加密,然后再发送到后端进行处理. 这一篇文章是前端用 RSA 的 publicKey 进行加密,然后后端用 Python 进行

  • 使用XML库的方式,实现RPC通信的方法(推荐)

    1.先说结论:使用xml-rpc的机制可以很方便的实现服务器间的RPC调用. 2.试验结果如下: 3.源码如下: 服务器端的源代码如下: import operator, math from SimpleXMLRPCServer import SimpleXMLRPCServer from functools import reduce def main(): server = SimpleXMLRPCServer(('127.0.0.1', 7001)) server.register_int

  • 在.NET Core中用最原生的方式读取Nacos的配置方法(推荐)

    背景 之前老黄写过一篇<ASP.NET Core结合Nacos来完成配置管理和服务发现>简单介绍了如何让.NET Core程序接入Nacos,之前的SDK里面更多的是对Nacos的Open API进行了封装以及对服务注册和发现的封装. 配置这一块当时并没有过多的处理,用起来有时感觉不会特别顺手,所以将它和.NET Core的配置结合起来了,让它用起来更简便. 怎么个简便法呢? 可以说,除了多添加一下provider,其他的操作都是和最原始的一模一样,你想用IConfiguration就用ICo

  • java使用RSA加密方式实现数据加密解密的代码

    RSA的应用 RSA是一种非对称加密算法.现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密 java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥 测试代码 public static void main(String args[]) { try { RSADemo rsa=new RSADemo(); rsa.generateKey(); byte[] data=rsa.encrypt("luanpeng".getBytes()); by

  • C#实现简单的文件加密与解密方式

    目录 C#实现文件加密与解密 C#进行url加密解密与jquery前端加密解密 C#进行url加密与解密 jquery 总结 C#实现文件加密与解密 代码: static class HandleFiles { public static void EncryptFile(string inputFile, string outputFile) //加密 { try { string password = @"12345678"; UnicodeEncoding UE = new Un

  • python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式.只要其密钥的长度足够长,用RSA加密的信息实际上是不能被解破的.但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战. RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥.

  • C#自定义RSA加密解密及RSA签名和验证类实例

    本文实例讲述了C#自定义RSA加密解密及RSA签名和验证类.分享给大家供大家参考.具体分析如下: 这个C#类自定义RSA加密解密及RSA签名和验证,包含了RSA加密.解密及签名所需的相关函数,带有详细的注释说明. using System; using System.Text; using System.Security.Cryptography; namespace DotNet.Utilities { /// <summary> /// RSA加密解密及RSA签名和验证 /// </

  • Java中RSA加密解密的实现方法分析

    本文实例讲述了Java中RSA加密解密的实现方法.分享给大家供大家参考,具体如下: public static void main(String[] args) throws Exception { // TODO Auto-generated method stub HashMap<String, Object> map = RSAUtils.getKeys(); //生成公钥和私钥 RSAPublicKey publicKey = (RSAPublicKey) map.get("

  • Android使用RSA加密和解密的示例代码

    一.公钥加密和私钥解密 /**RSA算法*/ public static final String RSA = "RSA"; /**加密方式,android的*/ // public static final String TRANSFORMATION = "RSA/None/NoPadding"; /**加密方式,标准jdk的*/ public static final String TRANSFORMATION = "RSA/None/PKCS1Pad

随机推荐