1. package org.yood.rsa.util;
  2.  
  3. import org.bouncycastle.asn1.ASN1Sequence;
  4. import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
  5.  
  6. import java.io.ByteArrayOutputStream;
  7. import java.io.IOException;
  8. import java.security.InvalidKeyException;
  9. import java.security.KeyFactory;
  10. import java.security.NoSuchAlgorithmException;
  11. import java.security.PrivateKey;
  12. import java.security.PublicKey;
  13. import java.security.spec.InvalidKeySpecException;
  14. import java.security.spec.RSAPrivateKeySpec;
  15. import java.security.spec.X509EncodedKeySpec;
  16. import java.util.Base64;
  17. import javax.crypto.BadPaddingException;
  18. import javax.crypto.Cipher;
  19. import javax.crypto.IllegalBlockSizeException;
  20. import javax.crypto.NoSuchPaddingException;
  21.  
  22. public class BestRSA {
  23.  
  24. public static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0kgVXWgRcOLyFbfHNKK55syz/" +
  25. "GhhMzGLPFj5AzczanP7NSCQEPPYhehMYhGUZI+Du8WS1yfOQ6SUYIYKZRuLUSSm4" +
  26. "ScsjhY+1LED9S+LDzDWCWnQah4Q4z0owNRySJqCSO4uA+ARg954n6kbXIg4hl2LM" +
  27. "UYelcocj1lBkymjGaQIDAQAB";
  28.  
  29. public static String privateKey = "MIICXQIBAAKBgQC0kgVXWgRcOLyFbfHNKK55syz/GhhMzGLPFj5AzczanP7NSCQE" +
  30. "PPYhehMYhGUZI+Du8WS1yfOQ6SUYIYKZRuLUSSm4ScsjhY+1LED9S+LDzDWCWnQa" +
  31. "h4Q4z0owNRySJqCSO4uA+ARg954n6kbXIg4hl2LMUYelcocj1lBkymjGaQIDAQAB" +
  32. "AoGBAJftSCsv5P1HC29kiw8oDGz/EXvuE8YCLZy5xVU3EwZZE5Xa/drHA/w0vv5g" +
  33. "3sMhSe8hEbBWo+UoFPrRrxWR6+RwU0Mfrn9kAbSmmK5M8aoOG+fx/++mhmwH0fuN" +
  34. "BWcMZbcAti0n3DBFzhXjcmVqaSM9Z6eFREnX+d639cfwXEuRAkEAxlAY9wedTPdC" +
  35. "sTwtCpuPn5bNA+vBoTS+GcrEcP5H5ComWXxbPyvY8nCE1PCln/+FIddTo5TnDBAl" +
  36. "rondH3gS1QJBAOkYrmmChIYwAzRKjkaGRPyCJ+VLYIZ+yQis3udUDmOWxP3xKnBV" +
  37. "3j+BvD1GqhVBEHxPRBVWDKQ4+4AlWg2YZ0UCQQCoUQNfZ48S7Com07RG9JGKGiwX" +
  38. "z9mgQWu36Gmina/W8A9slCe+DjEsVGPpd/abPfx5JJFQnekcS/gvk8OiGf+hAkBU" +
  39. "XYKC3aJpjucZ/gIQtHgzjEg0TVvaUfkhErB6uYmbse4Km0bo8atHAQXIh9L3bl0x" +
  40. "IN9beZGJvrYIY3x8fzShAkADMutFaI6q6buVGkqGR6pNe6V1XDBdKPGvC5xhTgiS" +
  41. "3lTO5GjdHqW4+9SyR97USTyxRZXEWMSD/73ZQE592Mfy";
  42.  
  43. private static String algorithm = "RSA";
  44. private static final int MAX_ENCRYPT_BLOCK = 117;
  45. private static final int MAX_DECRYPT_BLOCK = 128;
  46. private static String data = "1234561234561234561234561234561234561234561234561234561234561234561234561\n" +
  47. "2345612345612345612345612345612345612345612345612345612345612345612345612\n" +
  48. "4561234561234561234561234561234561234561234561234561234561234561234561234\n" +
  49. "5612345612345612345612345612345612345612345612345612345612345612345612345\n" +
  50. "6123456123456123456123456123456123456123456123456123456123456123456123456\n" +
  51. "1234561234561234561234561234561234561234561234561234561234561234561234561\n" +
  52. "2345612345612345612345612345612345612345612345612345612345612345612345612\n" +
  53. "3456123456123456123456123456123456123456123456123456123456123456123456123\n" +
  54. "4561234561234561234561234561234561234561234561234561234561234561234561234\n" +
  55. "5612345612345612345612345612345612345612345612345612345612345612345612345\n" +
  56. "6123456123456123456123456123456123456123456123456\n";
  57.  
  58. public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException {
  59. String test = testEncrypt(privateKey, data);
  60. System.out.println(test);
  61. String testDecrypt = testDecrypt(publicKey, test);
  62. System.out.println(testDecrypt);
  63.  
  64. }
  65.  
  66. /**
  67. * 加密
  68. */
  69.  
  70. public static String testEncrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException {
  71. byte[] decode = Base64.getDecoder().decode(key);
  72. RSAPrivateKeyStructure asn1PrivKey = new RSAPrivateKeyStructure((ASN1Sequence) ASN1Sequence.fromByteArray(decode));
  73. RSAPrivateKeySpec rsaPrivKeySpec = new RSAPrivateKeySpec(asn1PrivKey.getModulus(), asn1PrivKey.getPrivateExponent());
  74. KeyFactory kf = KeyFactory.getInstance(algorithm);
  75. PrivateKey generatePrivate = kf.generatePrivate(rsaPrivKeySpec);
  76. Cipher ci = Cipher.getInstance(algorithm);
  77. ci.init(Cipher.ENCRYPT_MODE, generatePrivate);
  78.  
  79. byte[] bytes = data.getBytes();
  80. int inputLen = bytes.length;
  81. int offLen = 0;//偏移量
  82. int i = 0;
  83. ByteArrayOutputStream bops = new ByteArrayOutputStream();
  84. while (inputLen - offLen > 0) {
  85. byte[] cache;
  86. if (inputLen - offLen > 117) {
  87. cache = ci.doFinal(bytes, offLen, 117);
  88. } else {
  89. cache = ci.doFinal(bytes, offLen, inputLen - offLen);
  90. }
  91. bops.write(cache);
  92. i++;
  93. offLen = 117 * i;
  94. }
  95. bops.close();
  96. byte[] encryptedData = bops.toByteArray();
  97. String encodeToString = Base64.getEncoder().encodeToString(encryptedData);
  98. return encodeToString;
  99. }
  100.  
  101. /**
  102. * 解密
  103. */
  104. public static String testDecrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException, IOException {
  105. byte[] decode = Base64.getDecoder().decode(key);
  106. // PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(decode); //java底层 RSA公钥只支持X509EncodedKeySpec这种格式
  107. X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(decode);
  108. KeyFactory kf = KeyFactory.getInstance(algorithm);
  109. PublicKey generatePublic = kf.generatePublic(x509EncodedKeySpec);
  110. Cipher ci = Cipher.getInstance(algorithm);
  111. ci.init(Cipher.DECRYPT_MODE, generatePublic);
  112.  
  113. byte[] bytes = Base64.getDecoder().decode(data);
  114. int inputLen = bytes.length;
  115. int offLen = 0;
  116. int i = 0;
  117. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  118. while (inputLen - offLen > 0) {
  119. byte[] cache;
  120. if (inputLen - offLen > 128) {
  121. cache = ci.doFinal(bytes, offLen, 128);
  122. } else {
  123. cache = ci.doFinal(bytes, offLen, inputLen - offLen);
  124. }
  125. byteArrayOutputStream.write(cache);
  126. i++;
  127. offLen = 128 * i;
  128. }
  129. byteArrayOutputStream.close();
  130. byte[] byteArray = byteArrayOutputStream.toByteArray();
  131. return new String(byteArray);
  132. }
  133. }

  

openssl rsa java 大于117的长字符串加密的更多相关文章

  1. Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  2. RSA 加密 解密 (长字符串) JAVA JS版本加解密

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  3. Java实现 蓝桥杯VIP 算法训练 最长字符串

    题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...

  4. Java性能优化之String字符串优化

    字符串是软件开发中最重要的对象之一.通常,字符串对象在内存中是占据了最大的空间块,因此如何高效地处理字符串,必将是提高整体性能的关键所在. 1.字符串对象及其特点 Java中八大基本数据类型没有Str ...

  5. PHP使用OPENSSL RSA加密解密数据

    加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...

  6. openssl和Java的keytool证书相关的命令总结

    Java的keytool keytool -genkey -alias myserver -keyalg RSA -keysize -keystore oauth-server.keystore -v ...

  7. OpenSSL - RSA非对称加密实现

    非对称加密:即两端使用一对不同的密钥进行加密. 在非对称加密中,需要两对密钥,公钥和私钥. 公钥个私钥属于对立关系,一把加密后,只有另一把才可以进行解密. 公钥数据加密 数字证书内包含了公钥,在进行会 ...

  8. openssl - rsa加解密例程

    原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...

  9. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

随机推荐

  1. 开发中常用的es6知识

    结合实际开发,开发中常用的es6的知识: 1.新增let和const命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效: cons ...

  2. jquery横向纵向鼠标滚轮全屏切换

    html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  3. List Except 失效 差集失效

    https://www.cnblogs.com/benhua/p/6805192.html

  4. qtp中type方法的按键常量

    记录键盘操作可以用set和presskey方法,而type方法是不记录的.type方法主要用于输入连接文本字符串和键盘修饰键(组合键),组合键之间用&符号. 如:JavaWindow(&quo ...

  5. printf()、sprintf()、vprintf()、vsprintf()(转)

    转自http://sumsung753.blog.163.com/blog/static/14636450120112151092934/ 一.printf() printf()函数优点在于可以格式化 ...

  6. maven配置及使用

    配置maven工程.从官网下载maven工具,然后解压到磁盘某个目录下即可. 计算机->属性->高级系统设置->环境变量. 新建如下变量: 变量名:MAVEN_HOME 变量值:C: ...

  7. Github 搭建 Hexo 纯静态化个人博客平台

    以前一直想搭建一个属于自己的博客平台,有余种种原因一直未能实现,最近闲来无事,参照网上的教程,搭建了属于自己的博客.自己的博客网站,样式自由,不需要受限于各大平台. 本篇为从零开始的基础篇,本篇所包含 ...

  8. Git bash 配置多个远端仓库

    $ cat .ssh/config #aliyeye Host aliyeye.com.cn HostName aliyeye.com.cn PreferredAuthentications publ ...

  9. conda的使用(附带远程文件传输命令)

    1 环境管理 1.1查看当前系统下的环境 conda info -e 创建新的环境 # 指定python版本为3.6,注意至少需要指定python版本或者要安装的包 conda create -n m ...

  10. Unity3d KeyCode 键盘各种键值详情

    KeyCode :KeyCode是由Event.keyCode返回的.这些直接映射到键盘上的物理键. 值        对应键 Backspace     退格键 Delete      Delete ...