openssl rsa java 大于117的长字符串加密
package org.yood.rsa.util; import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException; public class BestRSA { public static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0kgVXWgRcOLyFbfHNKK55syz/" +
"GhhMzGLPFj5AzczanP7NSCQEPPYhehMYhGUZI+Du8WS1yfOQ6SUYIYKZRuLUSSm4" +
"ScsjhY+1LED9S+LDzDWCWnQah4Q4z0owNRySJqCSO4uA+ARg954n6kbXIg4hl2LM" +
"UYelcocj1lBkymjGaQIDAQAB"; public static String privateKey = "MIICXQIBAAKBgQC0kgVXWgRcOLyFbfHNKK55syz/GhhMzGLPFj5AzczanP7NSCQE" +
"PPYhehMYhGUZI+Du8WS1yfOQ6SUYIYKZRuLUSSm4ScsjhY+1LED9S+LDzDWCWnQa" +
"h4Q4z0owNRySJqCSO4uA+ARg954n6kbXIg4hl2LMUYelcocj1lBkymjGaQIDAQAB" +
"AoGBAJftSCsv5P1HC29kiw8oDGz/EXvuE8YCLZy5xVU3EwZZE5Xa/drHA/w0vv5g" +
"3sMhSe8hEbBWo+UoFPrRrxWR6+RwU0Mfrn9kAbSmmK5M8aoOG+fx/++mhmwH0fuN" +
"BWcMZbcAti0n3DBFzhXjcmVqaSM9Z6eFREnX+d639cfwXEuRAkEAxlAY9wedTPdC" +
"sTwtCpuPn5bNA+vBoTS+GcrEcP5H5ComWXxbPyvY8nCE1PCln/+FIddTo5TnDBAl" +
"rondH3gS1QJBAOkYrmmChIYwAzRKjkaGRPyCJ+VLYIZ+yQis3udUDmOWxP3xKnBV" +
"3j+BvD1GqhVBEHxPRBVWDKQ4+4AlWg2YZ0UCQQCoUQNfZ48S7Com07RG9JGKGiwX" +
"z9mgQWu36Gmina/W8A9slCe+DjEsVGPpd/abPfx5JJFQnekcS/gvk8OiGf+hAkBU" +
"XYKC3aJpjucZ/gIQtHgzjEg0TVvaUfkhErB6uYmbse4Km0bo8atHAQXIh9L3bl0x" +
"IN9beZGJvrYIY3x8fzShAkADMutFaI6q6buVGkqGR6pNe6V1XDBdKPGvC5xhTgiS" +
"3lTO5GjdHqW4+9SyR97USTyxRZXEWMSD/73ZQE592Mfy"; private static String algorithm = "RSA";
private static final int MAX_ENCRYPT_BLOCK = 117;
private static final int MAX_DECRYPT_BLOCK = 128;
private static String data = "1234561234561234561234561234561234561234561234561234561234561234561234561\n" +
"2345612345612345612345612345612345612345612345612345612345612345612345612\n" +
"4561234561234561234561234561234561234561234561234561234561234561234561234\n" +
"5612345612345612345612345612345612345612345612345612345612345612345612345\n" +
"6123456123456123456123456123456123456123456123456123456123456123456123456\n" +
"1234561234561234561234561234561234561234561234561234561234561234561234561\n" +
"2345612345612345612345612345612345612345612345612345612345612345612345612\n" +
"3456123456123456123456123456123456123456123456123456123456123456123456123\n" +
"4561234561234561234561234561234561234561234561234561234561234561234561234\n" +
"5612345612345612345612345612345612345612345612345612345612345612345612345\n" +
"6123456123456123456123456123456123456123456123456\n"; public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException {
String test = testEncrypt(privateKey, data);
System.out.println(test);
String testDecrypt = testDecrypt(publicKey, test);
System.out.println(testDecrypt); } /**
* 加密
*/ public static String testEncrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException {
byte[] decode = Base64.getDecoder().decode(key);
RSAPrivateKeyStructure asn1PrivKey = new RSAPrivateKeyStructure((ASN1Sequence) ASN1Sequence.fromByteArray(decode));
RSAPrivateKeySpec rsaPrivKeySpec = new RSAPrivateKeySpec(asn1PrivKey.getModulus(), asn1PrivKey.getPrivateExponent());
KeyFactory kf = KeyFactory.getInstance(algorithm);
PrivateKey generatePrivate = kf.generatePrivate(rsaPrivKeySpec);
Cipher ci = Cipher.getInstance(algorithm);
ci.init(Cipher.ENCRYPT_MODE, generatePrivate); byte[] bytes = data.getBytes();
int inputLen = bytes.length;
int offLen = 0;//偏移量
int i = 0;
ByteArrayOutputStream bops = new ByteArrayOutputStream();
while (inputLen - offLen > 0) {
byte[] cache;
if (inputLen - offLen > 117) {
cache = ci.doFinal(bytes, offLen, 117);
} else {
cache = ci.doFinal(bytes, offLen, inputLen - offLen);
}
bops.write(cache);
i++;
offLen = 117 * i;
}
bops.close();
byte[] encryptedData = bops.toByteArray();
String encodeToString = Base64.getEncoder().encodeToString(encryptedData);
return encodeToString;
} /**
* 解密
*/
public static String testDecrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException, IOException {
byte[] decode = Base64.getDecoder().decode(key);
// PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(decode); //java底层 RSA公钥只支持X509EncodedKeySpec这种格式
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(decode);
KeyFactory kf = KeyFactory.getInstance(algorithm);
PublicKey generatePublic = kf.generatePublic(x509EncodedKeySpec);
Cipher ci = Cipher.getInstance(algorithm);
ci.init(Cipher.DECRYPT_MODE, generatePublic); byte[] bytes = Base64.getDecoder().decode(data);
int inputLen = bytes.length;
int offLen = 0;
int i = 0;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
while (inputLen - offLen > 0) {
byte[] cache;
if (inputLen - offLen > 128) {
cache = ci.doFinal(bytes, offLen, 128);
} else {
cache = ci.doFinal(bytes, offLen, inputLen - offLen);
}
byteArrayOutputStream.write(cache);
i++;
offLen = 128 * i;
}
byteArrayOutputStream.close();
byte[] byteArray = byteArrayOutputStream.toByteArray();
return new String(byteArray);
}
}

openssl rsa java 大于117的长字符串加密的更多相关文章
- Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- RSA 加密 解密 (长字符串) JAVA JS版本加解密
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- Java实现 蓝桥杯VIP 算法训练 最长字符串
题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...
- Java性能优化之String字符串优化
字符串是软件开发中最重要的对象之一.通常,字符串对象在内存中是占据了最大的空间块,因此如何高效地处理字符串,必将是提高整体性能的关键所在. 1.字符串对象及其特点 Java中八大基本数据类型没有Str ...
- PHP使用OPENSSL RSA加密解密数据
加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...
- openssl和Java的keytool证书相关的命令总结
Java的keytool keytool -genkey -alias myserver -keyalg RSA -keysize -keystore oauth-server.keystore -v ...
- OpenSSL - RSA非对称加密实现
非对称加密:即两端使用一对不同的密钥进行加密. 在非对称加密中,需要两对密钥,公钥和私钥. 公钥个私钥属于对立关系,一把加密后,只有另一把才可以进行解密. 公钥数据加密 数字证书内包含了公钥,在进行会 ...
- openssl - rsa加解密例程
原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
随机推荐
- WCF服务无法访问DateTime类型的解决方法
在WCF服务中,如果entity类含有DateTime类型的字段,那么接口将会被执行两次,从而出现无法访问的情况.如下图所示: 原因是WCF中DateTime无法转换成序列化JSON字符串,DateT ...
- 错误处理:error(0) error portability:3 this xilinx application has run out of memory has encountered a memory conflict
在FPGA侧提供了一个gp0,gp1各占1m内存的版本后.生成mcs版本,在下载版本时报错: error(0) error portability:3 this xilinx application ...
- raid卡的结构示意图
raid卡的结构示意图,取自<大话存储>第124页 ROM:一般用FLash芯片做ROM,存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码; XOR芯片:专门用来做RAID ...
- popstate事件在低版本webkit中的调用
popstate是H5的history系列中的事件,但是在低版本的webkit中会自动触发.H5中的history api是不会使页面发生跳转的,只是操作地址栏和响应的state属性而已,而且是手动操 ...
- springboot学习小记
思维导图:https://www.edrawsoft.cn/viewer/public/s/72a06689197636 1.springboot是一个快速整合第三方框架,简化XML配置完全采用注解化 ...
- Linux c codeblock的使用(一):新建一个工程
(1)点击New->Project,出现如下图所示,然后再选择Console application,点击Go (2)点击Next (3)根据自己的需求选择特定的语言(前提是你的系统上有这个语言 ...
- Freeswitch 各版本一键安装脚本 Freeswitch 快速安装 G729编解码库
最近有时间整理,写了freeswitch的一键安装包分享一下,里面带有 mysql=0 是否选择安装mysql. 其他提示:脚本里面集成了安装g729脚本,支持录音.转码的bcg729脚本. 1.下载 ...
- mybatis调用存储过程,获取返回的游标
将调用存储过程参数放入map中,由于返回的游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap.设置返回的jdbcType=CURSOR,resultMap设置为id对应的 ...
- multiprocessing
multiprocessing multiprocessing模块是跨平台版本的多进程模块. multiprocessing模块提供了一个Process类来代表一个进程对象. multiprocess ...
- net core 随笔
UseApplicationInsights 这个有用到azure 才有用, 平时没用的话可以去掉. 遥测. 上下文指的是 进程间占有的资源空间. 当一个进程时间片到了或者资缺的时候就会让出CPU ...