基本概念

Base64:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

RSA: RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

JAVA API

  • public class Base64
    extends Object

    该类仅由用于获得Base64编码方案的编码器和解码器的静态方法组成。 该类的实现支持以下类型的Base64,如RFC 4648和RFC 2045中所述 。

    • Basic

      使用RFC 4648和RFC 2045表1中规定的“Base64字母表”进行编码和解码操作。 编码器不添加任何换行符(行分隔符)字符。 解码器拒绝包含base64字母外的字符的数据。

    • URL and Filename safe

      使用RFC 4648的表2中规定的“URL和Filename safe Base64 Alphabet”进行编码和解码。 编码器不添加任何换行符(行分隔符)字符。 解码器拒绝包含base64字母外的字符的数据。

    • MIME

      使用RFC 2045表1中规定的“Base64字母表”进行编码和解码操作。 编码输出必须以不超过76个字符的行'\n' ,并使用回车'\r'然后立即以换行'\n'作为行分隔符。 没有行分隔符添加到编码输出的末尾。 在解码操作中,将忽略base64字母表中未找到的所有行分隔符或其他字符。

    除非另有说明,否则将null参数传递给null的方法将导致抛出NullPointerException

源代码


import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;public class RSADemo {private static Map<Integer, String> keyMap = new HashMap<Integer, String>();  //用于封装随机产生的公钥与私钥public static void main(String[] args) throws Exception {//生成公钥和私钥genKeyPair();//加密字符串String message = "df723820";System.out.println("随机生成的公钥为:" + keyMap.get(0));System.out.println("随机生成的私钥为:" + keyMap.get(1));String messageEn = encrypt(message,keyMap.get(0));System.out.println(message + "\t加密后的字符串为:" + messageEn);String messageDe = decrypt(messageEn,keyMap.get(1));System.out.println("还原后的字符串为:" + messageDe);}/** * 随机生成密钥对 * @throws NoSuchAlgorithmException */  public static void genKeyPair() throws NoSuchAlgorithmException {  // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象  KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");  // 初始化密钥对生成器,密钥大小为96-1024位  keyPairGen.initialize(1024,new SecureRandom());  // 生成一个密钥对,保存在keyPair中  KeyPair keyPair = keyPairGen.generateKeyPair();  RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥  RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥  String publicKeyString = new String(Base64.getEncoder().encode(publicKey.getEncoded()));  // 得到私钥字符串  String privateKeyString = new String(Base64.getEncoder().encode((privateKey.getEncoded())));  // 将公钥和私钥保存到MapkeyMap.put(0,publicKeyString);  //0表示公钥keyMap.put(1,privateKeyString);  //1表示私钥}  /** * RSA公钥加密 *  * @param str *            加密字符串* @param publicKey *            公钥 * @return 密文 * @throws Exception *             加密过程中的异常信息 */  public static String encrypt( String str, String publicKey ) throws Exception{//base64编码的公钥byte[] decoded = Base64.getDecoder().decode(publicKey);RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, pubKey);String outStr = Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes("UTF-8")));return outStr;}/** * RSA私钥解密*  * @param str *            加密字符串* @param privateKey *            私钥 * @return 铭文* @throws Exception *             解密过程中的异常信息 */  public static String decrypt(String str, String privateKey) throws Exception{//64位解码加密后的字符串byte[] inputByte = Base64.getDecoder().decode(str.getBytes("UTF-8"));//base64编码的私钥byte[] decoded = Base64.getDecoder().decode(privateKey);  RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));  //RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, priKey);String outStr = new String(cipher.doFinal(inputByte));return outStr;}}

运行结果

随机生成的公钥为:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdN5gV59ncjUISnxPW0vuTiPeGJfwA5Sqnn6bTPYdHNwenUxYBB1ZU46z8pRJQZESMoBS9w5Yqu7LyPLtFhI58bq3EdrjY51gWnrxy6iZR0NlhRtgy2mLxFPpdnEiNnMoNGFwgoxdpdgIQGFwZNcA3WNIhlCFzHWvEBBQW7tRbWwIDAQAB
随机生成的私钥为:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ03mBXn2dyNQhKfE9bS+5OI94Yl/ADlKqefptM9h0c3B6dTFgEHVlTjrPylElBkRIygFL3Dliq7svI8u0WEjnxurcR2uNjnWBaevHLqJlHQ2WFG2DLaYvEU+l2cSI2cyg0YXCCjF2l2AhAYXBk1wDdY0iGUIXMda8QEFBbu1FtbAgMBAAECgYAFkpnmdOBpC+zCojbez32xXhKAA8qp8XWQmX0dUboA0TeJO8203aC2w5c3IVbD2LoBTg9OJqek/iA6q+JrdWZjfoLACKXwksTzENuALzeqyRtaIFITRdr+tT8/HUP6t0TFELdSixtZPY0+Z2O31gBr2tUXLYSwSRt+gk77nRJd0QJBAM3H4eenLe6ojkHzlS4Cavqr4Dq+bMXf1fT5K17IzNbDgqmSuJywmMYgbgAIvYbAW+qGWHtq+TIaTtzrwcLgsTkCQQDDlbU4yJRNQ3E9wV4m1RtRXmiCGuuqsDoQsQoR9XN+j5h8ME6FXdm8D3t0VMQTecG5ymgpXjnNzuj/Uf9tonUzAkAWW/6m3hp2kSgL8HyoKCkZna1alLBa+8xStvRIc0cWmt3KsR+QHvwqowFwzYJSbvpNzFU269Ox5vvks1U1aJa5AkEArZxwVs1FRyg8lvLUXmgAbcP9xK+czdDMWhCsvbBBKvDQDDzdFmluYw7jKSotOpRzsDXJLB9l9Bhcnnbs4ya4HQJAeUbzhT1M6MjgmBccVcdKKfDM4Z22c9aNmmZ/IH0xEkkuRGypqLJAcA8APFCyoJ/UVNTUPeXosFKd8zei+CnvFA==
df723820    加密后的字符串为:bZitLiAQs+l55uJw7bu/AJ/Q/RcbwmQSVuW1aKyBZzyrKSuHviXTHgDpbfA5CJe8ENXgLCtXUVz9Nh+C28j+aQlqjXPQnI0gBKWz/NMdPnA2LIlgHnWIHD8/stvkDCenZ1zNm4ZfO1rgt0FVUhc2KAbh43FKcXXxSv3EdctAHso=
还原后的字符串为:df723820

参考文章

https://blog.csdn.net/qy20115549/article/details/83105736

https://blog.csdn.net/zoubaicai/article/details/78494369

https://blog.csdn.net/snowolf_37/article/details/83394523

https://www.cnblogs.com/alter888/p/9140732.html

JAVA——RSA加密与解密相关推荐

  1. javascript rsa java,用javascript与java执行 RSA加密与解密

    用javascript与java执行 RSA加密与解密 2009-12-12 14:58:30   出处:https://www.yqdown.com 这几天一直做安全登录,网上查了好多资料,不尽如意 ...

  2. RSA加密与解密(Java实现)

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. RSA的应用 RSA是一种非对称加密算法.现在,很多登陆 ...

  3. java rsa加密解密_前端实现对请求参数进行RSA加密amp;解密,针对字符串过长进行分段加密amp;分段解密的处理...

    前言 在需求开发中,为了安全起见,我们都会难免遇到需要对一些敏感参数进行加密或者解密.所以,今天给大家分享的就是使用jsencrypt对请求参数进行RSA加密与解密,发这篇文章其实主要因为近期我的一位 ...

  4. 跨语言平台的RSA加密、解密、签名、验证算法的实现

      在网上可以找到各种各样的RSA实现代码,原理都是RSA算法的基本原理,但是在处理数据块划分.填充等问题上都是形形色色的,本文旨在探讨.实现遵循RFC 2313 PKCS#1 v1.5标准的一种跨语 ...

  5. 使用OpenSSL进行RSA加密和解密(非对称)

    1. RSA加密和解密基础概念 RSA是一种非对称加密. RSA秘钥:私钥和公钥,一对私钥和公钥就像夫妻一样是唯一的,用私钥加密后必须用对应的公钥才能解密,用公钥加密后必须用对应的私钥才能解密. 加密 ...

  6. JAVA各种加密与解密方式

    之前有兴趣研究了一下java的加密与解密的方法,发现市面上有好多种加密解密方式,在这里整理了一下. 目录 1.BASE64加密/解密 2.MD5(Message Digest Algorithm)加密 ...

  7. GO语言实现RSA 加密和解密的实现

    RSA 加密和解密的实现 openssl生成私钥 openssl genrsa -out rsa_private_key.pem 1024 openssl生成公钥 openssl rsa -in rs ...

  8. C#实现RSA加密和解密详解

    C#实现RSA加密和解密详解 原文:C#实现RSA加密和解密详解 RSA加密解密源码: using System; using System.Collections.Generic; using Sy ...

  9. C# -- RSA加密与解密

    1.  RSA加密与解密  --  使用公钥加密.私钥解密 public class RSATool{public string Encrypt(string strText, string strP ...

最新文章

  1. 数字货币 矿池 矿场 区别
  2. dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)
  3. 批处理命令 / cd
  4. c++ eos智能合约开发_[EOS智能合约]第二节:用EOS开发一个To-do List小应用
  5. centos中使用rpm包或yum命令在线安装的软件默认是安装在那个目录下
  6. hdu4418 概率dp+高斯消元(近日吐槽)
  7. js与python 抓包_Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程
  8. DevExpress Dashboard for .NET简化商业智能开发
  9. Java简单实现贪吃蛇经典小游戏(附源代码)
  10. 408考研计算机网络视频,计算机408考研视频哪个好
  11. 根据两点坐标计算两点距离
  12. PE系统优盘制作教程
  13. 不撞南墙不回头——浅谈深度优先搜索(DFS)
  14. 一文搞定 Spring Security 异常处理机制!
  15. 构建 Darknet 分类器 (Tiny Darknet) 训练数据集 (color recognition 颜色识别/color classification 颜色分类)
  16. MySQL 正负数排序
  17. 分享66个PHP源码,总有一款适合您
  18. component is not authorized by this account hint: [B3GVCa0189e575] 错误解决?
  19. Microsoft visio 2010之简单使用
  20. Oracle EBS Interface/API(35) -创建供应商地点API

热门文章

  1. CG笔记之一——透视投影
  2. 学计算机数据结构重要吗,程序员都说数据结构重要,那么究竟什么是数据结构?...
  3. android子视图无菜单,Android 菜单详解
  4. php上传多个文件类型,ThinkPHP上传多文件多类型
  5. html遇到英文单词整体换行,CSS单词换行and断词,你真的完全了解吗_html/css_WEB-ITnose...
  6. python多进程编程 多个函数并发执行_python并发编程之多进程编程
  7. echarts指针进度条刻度调整_指针式流量开关
  8. php setcookie使用变量,PHP setcookie() 函数
  9. java 多网卡ip_java获取双网卡ip地址
  10. 【小白学习tensorflow教程】四、使用 tfhub中的模型EfficientDet-Lite2 进行对象检测