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类库中提供了一 ...
随机推荐
- 开发中常用的es6知识
结合实际开发,开发中常用的es6的知识: 1.新增let和const命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效: cons ...
- jquery横向纵向鼠标滚轮全屏切换
html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...
- List Except 失效 差集失效
https://www.cnblogs.com/benhua/p/6805192.html
- qtp中type方法的按键常量
记录键盘操作可以用set和presskey方法,而type方法是不记录的.type方法主要用于输入连接文本字符串和键盘修饰键(组合键),组合键之间用&符号. 如:JavaWindow(&quo ...
- printf()、sprintf()、vprintf()、vsprintf()(转)
转自http://sumsung753.blog.163.com/blog/static/14636450120112151092934/ 一.printf() printf()函数优点在于可以格式化 ...
- maven配置及使用
配置maven工程.从官网下载maven工具,然后解压到磁盘某个目录下即可. 计算机->属性->高级系统设置->环境变量. 新建如下变量: 变量名:MAVEN_HOME 变量值:C: ...
- Github 搭建 Hexo 纯静态化个人博客平台
以前一直想搭建一个属于自己的博客平台,有余种种原因一直未能实现,最近闲来无事,参照网上的教程,搭建了属于自己的博客.自己的博客网站,样式自由,不需要受限于各大平台. 本篇为从零开始的基础篇,本篇所包含 ...
- Git bash 配置多个远端仓库
$ cat .ssh/config #aliyeye Host aliyeye.com.cn HostName aliyeye.com.cn PreferredAuthentications publ ...
- conda的使用(附带远程文件传输命令)
1 环境管理 1.1查看当前系统下的环境 conda info -e 创建新的环境 # 指定python版本为3.6,注意至少需要指定python版本或者要安装的包 conda create -n m ...
- Unity3d KeyCode 键盘各种键值详情
KeyCode :KeyCode是由Event.keyCode返回的.这些直接映射到键盘上的物理键. 值 对应键 Backspace 退格键 Delete Delete ...