1、公钥私钥生成工具

参考: http://web.chacuo.net/netrsakeypair

2、python实现


import base64from Crypto.PublicKey import RSApub_key = '''-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4kIvaLa1g+cf0UYN3gH5
Eypbu7jwgrWT1QWDx4OKMCokzwK3dvFF+JalTZ7stGBEgvn88gdKZMzluBtXy/Cp
QUWBYkL4i19BjJ7cpCOtvlIpVS9H3uaqaA3WDT4q/SpTRP2ToWWz2mJ7Jm8TueB0
XljBGnVLPZ3RuGjOx+fagzq6qb0dOVri/BcodrOUFQ40f+gx+AIIEo02VPccIT/l
NCZFzfftvuMbkOiruSR5RxPe48UQzoBuHb/4xisUFxkF7k8ncLCPk4jmr/MAQzaC
AfCwNLA5/mVYE0oulGos7C+bDelGAUPk9iJeSGa4bpkLll/2UUcdeP4pYwj1ytnb
vwIDAQAB
-----END PUBLIC KEY-----
'''pri_key = '''-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDiQi9otrWD5x/R
Rg3eAfkTKlu7uPCCtZPVBYPHg4owKiTPArd28UX4lqVNnuy0YESC+fzyB0pkzOW4
G1fL8KlBRYFiQviLX0GMntykI62+UilVL0fe5qpoDdYNPir9KlNE/ZOhZbPaYnsm
bxO54HReWMEadUs9ndG4aM7H59qDOrqpvR05WuL8Fyh2s5QVDjR/6DH4AggSjTZU
9xwhP+U0JkXN9+2+4xuQ6Ku5JHlHE97jxRDOgG4dv/jGKxQXGQXuTydwsI+TiOav
8wBDNoIB8LA0sDn+ZVgTSi6UaizsL5sN6UYBQ+T2Il5IZrhumQuWX/ZRRx14/ilj
CPXK2du/AgMBAAECggEABSeG1vbamb+pLOZQqI8Y8oPThSpIaGHklUTD5MatXj2H
iyO/tDj45BnieCs3r0BGL0mspoLeAf/c992/mUjJQlBoCyoFaX9pCeAQnLinW5+Z
i3RBSeWtWiN+jdyttAjDzt2MAHBFsaLutUhwhZqEbCXPeF/Vr/ipb28LzugMRVMF
M5zuUkbUgqmRm7nHbdR2H5ghkMfh01UGflhLxqZUv2+ILuPqs66Zbw5dX296l5bP
d4JCx95BiHMT+XfLapSEVuxXZDdZ/YOH4ceZ22zxOYygXEq2c13sHtQq/h98O82i
0JaTEsDWde9Pc2TJ8m0c1I1fdpXEPie5U9i3ckpK2QKBgQD/KLi5sMGccg84S9Vu
WZR4qsgnQ0xOaBMQDGtASUxSi2CNE74yXQki1eOk1acx3i5Ff3bq1g6cSIAeNr8/
ayYYut6lrGoSJwqiAU+6DQVMs4yH9zPgPQg5ldDQitO6QDcl3KLRQjiwYQmZQaNt
XkV/Czrb6aEHTUJuJ6l3teoDmwKBgQDjARSEl1Gjj60Dqgedp5qp0ab1dYiGiDWX
ux9MrZSu/cWdkDLxdowbFT7ovqZBOaypoF2H2x4TNl3JqbH7BBgmDW21oCPRdzTQ
CA+IOMxyF7gFGn5zzf0DnM2WklYWM5+IL9Y0DAwykFW+54PKxQrNlkFkfFtbSQ9T
DcFZjuUErQKBgQD6/UGIVxh8Ha5fACl4HOHxOH0eMhLTZYiq1qyBVhifcb6Nx4fl
3qJoA+GjeQ63/QejEVkWc213ydFM5ymE5o9Y8Cim60yDgqfw6D1WlAxMgKmR7Va4
ExEOJBJ9sLHImfYlZj06fltpFGruuCRcJslRyOgi/lOJ7TOVS6pluSnyVQKBgQCr
egtnxW60ITpOxEgQfaVFlsuKLAi/p3Dkd0PDhnQEZEq9JUp2QFjBtKDa6/lm2Axn
7m34zDrBxJXAWmHJ/mPHiulPA/NKrcPFSfGBs3Ys0WH+6O6QyA/ShMaAcXZ6OvDN
zWT/2AH2yDUdioFx0LrCZjhrkczo/h2HXaKq5lh12QKBgQDY5cdQsR0KvjpB/w9t
+Kk3uSXw10LkCCCKgjw6FopWOzux9HqNyXYMY9eHFWnKrxpwJ/yqPHy62hjBnpRT
mq0aVnWisWTWELRWcPckuehx150jzQ+Ur00Rt96ArV/pP+iCrKN6vDrfbZa3Lkg4
Gd8zP2aROXWnVgIYowOvIat1PQ==
-----END PRIVATE KEY-----
'''def b64_encrypt(func):def _wrapper(*args, **kwargs):str_result = func(*args, **kwargs)return base64.b64encode(str_result)return _wrapperdef b64_decrypt(func):def _wrapper(str_data):return func(base64.b64decode(str_data))return _wrapper@b64_encrypt
def encrypt(data):pk = RSA.importKey(pub_key)en, size = "", 256for i in range(0, len(data), size):  # 长文本分段加密tmp_data = data[i: i + size]en += pk.encrypt(tmp_data, 0)[0]return en@b64_decrypt
def decrypt(data):sk = RSA.importKey(pri_key)out_text, size = "", 256for i in range(0, len(data), size):tmp_text = data[i:i + size]out_text += sk.decrypt(tmp_text)return out_textdef test(data):en_text = encrypt(data)de_text = decrypt(en_text)print '--' * 30print 'data     =\t', dataprint 'encrypt  =\t', en_textprint de_text == dataprintif __name__ == '__main__':test("hello")test("abcdefg" * 50)

3、Java实现

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;public class RSAUtils {private static final String PUB_KEY = "-----BEGIN PUBLIC KEY-----\r" +"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgDqCUjJ2lAksfIq2406\r" +"C7FRTvBZLLs5RvsQq64uVc4JPKmbpa+tjknfHkFHrBZ+GcprytAAgCkElNTsNFms\r" +"hy8OBSm5Vu925vvkjg38A8R87PVSOwPv8SktzBpzT+iPgLPFCp6JYm7jlYXqNqgG\r" +"f8j2EHaiwQ1O+eYHB3dR77vBEVZqx4Sbo0TGk/QV+u1f01vA7M8Lit2qqKoghJl0\r" +"ROexmTgyuSmSW3UEfDOr3iZwaBP1Lq4DGXdiJGTpONDeeCYOY/GWHjaqELyL8Tz4\r" +"GOIuO0SjiQ60BTT5IVKa3IzW4bsIiBW7LR2PKKulU9HQmAZGbEV98F5mxAypK7W+\r" +"XwIDAQAB\r" +"-----END PUBLIC KEY-----\r";private static final String PRI_KEY = "-----BEGIN PRIVATE KEY-----\r" +"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyAOoJSMnaUCSx\r" +"8irbjToLsVFO8FksuzlG+xCrri5Vzgk8qZulr62OSd8eQUesFn4ZymvK0ACAKQSU\r" +"1Ow0WayHLw4FKblW73bm++SODfwDxHzs9VI7A+/xKS3MGnNP6I+As8UKnolibuOV\r" +"heo2qAZ/yPYQdqLBDU755gcHd1Hvu8ERVmrHhJujRMaT9BX67V/TW8DszwuK3aqo\r" +"qiCEmXRE57GZODK5KZJbdQR8M6veJnBoE/UurgMZd2IkZOk40N54Jg5j8ZYeNqoQ\r" +"vIvxPPgY4i47RKOJDrQFNPkhUprcjNbhuwiIFbstHY8oq6VT0dCYBkZsRX3wXmbE\r" +"DKkrtb5fAgMBAAECggEAKT8Q/AnDzDSZ7CnjSHCXLLJv1szWvQi9Ivd2S3HXBsbx\r" +"WP8sM95bZwczDj2uL/AeVDeVdq9wDkJy71HPUeodkk2TABtE+SIP+UIRGeGfrffP\r" +"wtCtt0MYTFdwZ0URx0hqSDZfyDAoQYjUb4dSWEvjBaU5b2MuH3HIBRwKMO6zK8uA\r" +"y9dUFGSC4ZhHi2UT8pMlhqX9Z+blZYtqzvNP/DzLQWXG8BmiA3vf0y9uPxEauUJH\r" +"Zu1kdze0e8N7H4QdjN9rwqUP8LuC6F8y2TqGec0xQTpZ/t8LM4iJY1kjhu5Su7sK\r" +"DetShx4sdpOOHlPuGgOQ3zJKmkFm8EDUvOaVfj7YAQKBgQDgApWKYyRsaWD7rE2V\r" +"amITJjDQYHHb6gvSN8kZmaVbknl0/Y2S6Uqj9L1iLnYx4NGEWNbI9KrsRPiONBdd\r" +"bmrCFBefDxnueZtNkFzBoFm2zAbDqQZ5OM1mgw5kwKLBUk2hEsnvJPNnHZ3/vrg8\r" +"lbyHXeJwsYLdxDvew8V1XNLaAQKBgQDLbGmOKk7d+HZvTlYreSCWyTocUAIzS7Vq\r" +"5NLicgmU5pq8OPBHMIArVy/n6tSb1WVdMAfPzYNyvzAfG17Br0aCT5xvCAxbnfaT\r" +"AwgI0Yz+Xktl1JxUrxEbrd7aPAp7Z/Za6aegRku0PM+wjtWhnwDW9Aa983gg5zDp\r" +"NOtJtYbYXwKBgBE/YbA0Dfvi6Tq3e4nDlSWQTTXeFyYtkRdwgCVedSLl1kAxvZLQ\r" +"L5UMJQDIPwV8H+WmyXLTk815SgH49MuW0tV6oo72pLJ93n1MXjfyVrYCY4rxGrR+\r" +"sSHxeUw8oMttwNhkD/Q/zhXka+PjFWBkzw1FJ0gyArd8gneWbz+oE/wBAoGBAKoI\r" +"yIJootuvX2/STvyvlqnzMXuQ9QXjdpUPB6b4I0IvL4+9GDqpM7kGe6ijBWvsh3nJ\r" +"N/5ejk1Pue2Gd0H2PD2YRe4ZEBtUglKH6iNU5UGJmARaHwI6A1bbkrdgEHLuh2Ge\r" +"hNrXZ1gUrJWsDq21toH2H9yOsg7usFd+QF2wOjKJAoGBAIBmtDdMnofU00Om6pg5\r" +"s+G2fp91/vCVUCcqUvwxcmw7dlDaDY85WN+XjgYReKNqhNbDPoZP26oJP+tzoSPO\r" +"kkaLfV86dauKJqRsVJ0a1mpRYYNzfKT/v3uhCLc+mrnhUTg+/Iq5QR9fRmN09252\r" +"UmqtRtkQVtfIWSC9S4wCrGjV\r" +"-----END PRIVATE KEY-----\r";private static final int sliceSize = 256;private PublicKey publicKey;private PrivateKey privateKey;public RSAUtils() throws Exception {this(PUB_KEY, PRI_KEY);}public RSAUtils(String publicKey, String privateKey) throws Exception {this.publicKey = this.loadPublicKey(publicKey);this.privateKey = this.loadPrivateKey(privateKey);}private String prepareKeyString(String raw) throws Exception {StringBuilder sb = new StringBuilder();BufferedReader br = new BufferedReader(new StringReader(raw));String line;while ((line = br.readLine()) != null) {if (line.startsWith("-")) {continue;}sb.append(line.trim()).append("\r");}br.close();return sb.toString();}private PublicKey loadPublicKey(String strPk) throws Exception {return KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.decodeBase64(this.prepareKeyString(strPk).getBytes())));}private PrivateKey loadPrivateKey(String strPk) throws Exception {return KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64.decodeBase64(this.prepareKeyString(strPk).getBytes())));}public String encrypt(String text) throws Exception {Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());cipher.init(Cipher.ENCRYPT_MODE, this.publicKey);byte[] srcBytes = text.getBytes();ByteArrayOutputStream bos = new ByteArrayOutputStream();for (int i = 0; i < srcBytes.length; i += sliceSize) {int inputLen = (i + sliceSize >= srcBytes.length) ? srcBytes.length - i : sliceSize;byte[] buf = cipher.doFinal(srcBytes, i, inputLen);bos.write(buf);}return Base64.encodeBase64String(bos.toByteArray());}public String decrypt(String text) throws Exception {byte[] srcBytes = Base64.decodeBase64(text);Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());cipher.init(Cipher.DECRYPT_MODE, this.privateKey);ByteArrayOutputStream bos = new ByteArrayOutputStream();for (int i = 0; i < srcBytes.length; i += sliceSize) {byte[] buf = cipher.doFinal(srcBytes, i, sliceSize);bos.write(buf);}return new String(bos.toByteArray());}public static void main(String[] args) throws Exception {RSAUtils m = new RSAUtils();StringBuilder sb = new StringBuilder();for (int i = 0; i < 1; i++) {sb.append("hello");}String result = m.encrypt(sb.toString());String expectEncryptStr = "rfW4LBNU6EDAJ135Uiqk8kvWgf0x9m4NZCn1L5/6bgWAKA8OlIp7rT/uyueRrirCmZ1cXAQcNAQmRKhMI7y4or2YqrxT/TqV+dQIyyAea0Yq6HIfU9IrpvDmgcPNh91WdtLo6CYFqvg2VSBELdUUL2x/Z7B4oQ/rxTM5XX1AogiFa6EM5PtYE9YTMBsQzy3RoAGA1o7NqrziJTtJT5Os0UFAWikFmgZbLzAVsXrg//NLW0BYCoXEVrMP9V+/OGd3PocH3apCvAgpajEKtzSSIj6oAd+meM9wdQFZ43+gY8j9MVYSidYyygQhN7GUTB3ms878zmP3YKIHMKDBArdKsw==";System.out.println(result);System.out.println(result.equals(expectEncryptStr));System.out.println(m.decrypt(result));}}

Gradle依赖:

// https://mvnrepository.com/artifact/com.squareup.jnagmp/bouncycastle-rsa
compile group: 'com.squareup.jnagmp', name: 'bouncycastle-rsa', version: '2.1.0'// https://mvnrepository.com/artifact/commons-codec/commons-codec
compile group: 'commons-codec', name: 'commons-codec', version: '1.11'

转载于:https://my.oschina.net/pp1/blog/1797215

RSA非对称加密解密实现相关推荐

  1. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  2. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  3. RSA非对称加密解密概念

    1.RSA加密解密在线计算网站 网站1:https://www.bejson.com/enc/rsa/ 网站2:https://the-x.cn/cryptography/Rsa.aspx 2.PKC ...

  4. 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密

    定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...

  5. Springboot+RSA非对称加密

    这是百度百科对(对称加密丶非对称加密)的解释: (1)对称加密算法在加密和解密时使用的是同一个秘钥. (2)非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称 ...

  6. RSA非对称加密和解密(同时生成密钥)

    RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...

  7. rsa大数加密c语言,C语言:基于OpenSSL-RSA实现RSA非对称加解密

    关于OpenSSL的介绍和安装在此不多赘述,可以在网上找到很多相关资料,各位感兴趣可以去了解下(自觉对OpenSSL开源库只是初级使用阶段,也就不在此"秀下限"了),直接进入主题, ...

  8. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  9. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...

最新文章

  1. Mat矩阵基本操作与示例 OpenCV
  2. Opencv中除了cv2.cvtColor彩色图转灰度图之外的其他6种方法
  3. Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!
  4. 梅林安装opkg后安装iperf3_阳台到底有没有必要安装推拉门?利与弊告诉你,不要等安装后后悔...
  5. 【8.0、9.0c】树形列表 列标题 不对齐的问题及解决方案
  6. 软件测试--环境讲解
  7. 问题 C: 编写函数:字符串的复制 之一 (Append Code)
  8. JMeter 检查点之响应断言(Response Assertion)
  9. (翻译)Entity Framework技巧系列之一 - Tip 1 - 5
  10. 深入理解ButterKnife源码并掌握原理(一)
  11. iOS开发-当APP涉及到用户敏感信息适配Xcode9及(ios11)
  12. Pandas 学习手册中文第二版·翻译完成
  13. jpg、jpeg、png... 的区别
  14. 数据库-英语单词基础笔记-1
  15. 水晶易表 oracle,水晶易表调用C#的WebService,返回数据集合的应用分析
  16. 手机实名检测 API数据接口
  17. WinForm 随手记
  18. 虚拟机中的服务器密码忘了怎么办,虚拟机登录密码忘记了怎么办
  19. SAP在华真相:天价收费与用户之灾
  20. 学会了使用计算机之后作文,我学会了计算机

热门文章

  1. 基础ROS小车软件结构到底是什么样子的?
  2. 什么是网络流量劫持?揭秘详解黑客劫持的攻击手段与防御方法
  3. SpeexDsp回音消除的一些理解
  4. android 虚拟键盘高度,获取Android中虚拟键盘的高度
  5. python保存Excel文件sheet_name是中文时出错:UnicodeDecodeError
  6. pymol作图-氢键
  7. UTF8中文编码范围
  8. Java 9 - 说说响应式流
  9. 凤舞丹心东方美,中华才女竞风采 ——黛兰娜杯《中华才女大赛》七月汇演
  10. 数据可视化——R语言ggplot2包绘制相关矩阵为热图