1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > RSA非对称加密解密实现

RSA非对称加密解密实现

时间:2023-07-12 15:01:00

相关推荐

RSA非对称加密解密实现

1、公钥私钥生成工具

参考: /netrsakeypair

2、python实现

import base64from Crypto.PublicKey import RSApub_key = '''-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4kIvaLa1g+cf0UYN3gH5Eypbu7jwgrWT1QWDx4OKMCokzwK3dvFF+JalTZ7stGBEgvn88gdKZMzluBtXy/CpQUWBYkL4i19BjJ7cpCOtvlIpVS9H3uaqaA3WDT4q/SpTRP2ToWWz2mJ7Jm8TueB0XljBGnVLPZ3RuGjOx+fagzq6qb0dOVri/BcodrOUFQ40f+gx+AIIEo02VPccIT/lNCZFzfftvuMbkOiruSR5RxPe48UQzoBuHb/4xisUFxkF7k8ncLCPk4jmr/MAQzaCAfCwNLA5/mVYE0oulGos7C+bDelGAUPk9iJeSGa4bpkLll/2UUcdeP4pYwj1ytnbvwIDAQAB-----END PUBLIC KEY-----'''pri_key = '''-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDiQi9otrWD5x/RRg3eAfkTKlu7uPCCtZPVBYPHg4owKiTPArd28UX4lqVNnuy0YESC+fzyB0pkzOW4G1fL8KlBRYFiQviLX0GMntykI62+UilVL0fe5qpoDdYNPir9KlNE/ZOhZbPaYnsmbxO54HReWMEadUs9ndG4aM7H59qDOrqpvR05WuL8Fyh2s5QVDjR/6DH4AggSjTZU9xwhP+U0JkXN9+2+4xuQ6Ku5JHlHE97jxRDOgG4dv/jGKxQXGQXuTydwsI+TiOav8wBDNoIB8LA0sDn+ZVgTSi6UaizsL5sN6UYBQ+T2Il5IZrhumQuWX/ZRRx14/iljCPXK2du/AgMBAAECggEABSeG1vbamb+pLOZQqI8Y8oPThSpIaGHklUTD5MatXj2HiyO/tDj45BnieCs3r0BGL0mspoLeAf/c992/mUjJQlBoCyoFaX9pCeAQnLinW5+Zi3RBSeWtWiN+jdyttAjDzt2MAHBFsaLutUhwhZqEbCXPeF/Vr/ipb28LzugMRVMFM5zuUkbUgqmRm7nHbdR2H5ghkMfh01UGflhLxqZUv2+ILuPqs66Zbw5dX296l5bPd4JCx95BiHMT+XfLapSEVuxXZDdZ/YOH4ceZ22zxOYygXEq2c13sHtQq/h98O82i0JaTEsDWde9Pc2TJ8m0c1I1fdpXEPie5U9i3ckpK2QKBgQD/KLi5sMGccg84S9VuWZR4qsgnQ0xOaBMQDGtASUxSi2CNE74yXQki1eOk1acx3i5Ff3bq1g6cSIAeNr8/ayYYut6lrGoSJwqiAU+6DQVMs4yH9zPgPQg5ldDQitO6QDcl3KLRQjiwYQmZQaNtXkV/Czrb6aEHTUJuJ6l3teoDmwKBgQDjARSEl1Gjj60Dqgedp5qp0ab1dYiGiDWXux9MrZSu/cWdkDLxdowbFT7ovqZBOaypoF2H2x4TNl3JqbH7BBgmDW21oCPRdzTQCA+IOMxyF7gFGn5zzf0DnM2WklYWM5+IL9Y0DAwykFW+54PKxQrNlkFkfFtbSQ9TDcFZjuUErQKBgQD6/UGIVxh8Ha5fACl4HOHxOH0eMhLTZYiq1qyBVhifcb6Nx4fl3qJoA+GjeQ63/QejEVkWc213ydFM5ymE5o9Y8Cim60yDgqfw6D1WlAxMgKmR7Va4ExEOJBJ9sLHImfYlZj06fltpFGruuCRcJslRyOgi/lOJ7TOVS6pluSnyVQKBgQCregtnxW60ITpOxEgQfaVFlsuKLAi/p3Dkd0PDhnQEZEq9JUp2QFjBtKDa6/lm2Axn7m34zDrBxJXAWmHJ/mPHiulPA/NKrcPFSfGBs3Ys0WH+6O6QyA/ShMaAcXZ6OvDNzWT/2AH2yDUdioFx0LrCZjhrkczo/h2HXaKq5lh12QKBgQDY5cdQsR0KvjpB/w9t+Kk3uSXw10LkCCCKgjw6FopWOzux9HqNyXYMY9eHFWnKrxpwJ/yqPHy62hjBnpRTmq0aVnWisWTWELRWcPckuehx150jzQ+Ur00Rt96ArV/pP+iCrKN6vDrfbZa3Lkg4Gd8zP2aROXWnVgIYowOvIat1PQ==-----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_encryptdef 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_decryptdef 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 mons.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依赖:

// /artifact/com.squareup.jnagmp/bouncycastle-rsacompile group: 'com.squareup.jnagmp', name: 'bouncycastle-rsa', version: '2.1.0'// /artifact/commons-codec/commons-codeccompile group: 'commons-codec', name: 'commons-codec', version: '1.11'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。