java rsa加密数据大小_RSA加密解密(无数据大小限制,php、go、java互通实现)

2023-11-09

RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题。明文长度需要小于密钥长度,而密文长度则等于密钥长度。因此当加密内容长度大于密钥长度时,有效的RSA加解密就需要对内容进行分段。

这是因为,RSA算法本身要求加密内容也就是明文长度m必须0

这样,对于1024长度的密钥。128字节(1024bits)-减去11字节正好是117字节,但对于RSA加密来讲,padding也是参与加密的,所以,依然按照1024bits去理解,但实际的明文只有117字节了。

所以如果要对任意长度的数据进行加密,就需要将数据分段后进行逐一加密,并将结果进行拼接。同样,解码也需要分段解码,并将结果进行拼接。

Php实现

if (! function_exists('url_safe_base64_encode')) {

function url_safe_base64_encode ($data) {

return str_replace(array('+','/', '='),array('-','_', ''), base64_encode($data));

}

}

if (! function_exists('url_safe_base64_decode')) {

function url_safe_base64_decode ($data) {

$base_64 = str_replace(array('-','_'),array('+','/'), $data);

return base64_decode($base_64);

}

}

class XRsa

{

const CHAR_SET = "UTF-8";

const BASE_64_FORMAT = "UrlSafeNoPadding";

const RSA_ALGORITHM_KEY_TYPE = OPENSSL_KEYTYPE_RSA;

const RSA_ALGORITHM_SIGN = OPENSSL_ALGO_SHA256;

protected $public_key;

protected $private_key;

protected $key_len;

public function __construct($pub_key, $pri_key = null)

{

$this->public_key = $pub_key;

$this->private_key = $pri_key;

$pub_id = openssl_get_publickey($this->public_key);

$this->key_len = openssl_pkey_get_details($pub_id)['bits'];

}

/*

* 创建密钥对

*/

public static function createKeys($key_size = 2048)

{

$config = array(

"private_key_bits" => $key_size,

"private_key_type" => self::RSA_ALGORITHM_KEY_TYPE,

);

$res = openssl_pkey_new($config);

openssl_pkey_export($res, $private_key);

$public_key_detail = openssl_pkey_get_details($res);

$public_key = $public_key_detail["key"];

return [

"public_key" => $public_key,

"private_key" => $private_key,

];

}

/*

* 公钥加密

*/

public function publicEncrypt($data)

{

$encrypted = '';

$part_len = $this->key_len / 8 - 11;

$parts = str_split($data, $part_len);

foreach ($parts as $part) {

$encrypted_temp = '';

openssl_public_encrypt($part, $encrypted_temp, $this->public_key);

$encrypted .= $encrypted_temp;

}

return url_safe_base64_encode($encrypted);

}

/*

* 私钥解密

*/

public function privateDecrypt($encrypted)

{

$decrypted = "";

$part_len = $this->key_len / 8;

$base64_decoded = url_safe_base64_decode($encrypted);

$parts = str_split($base64_decoded, $part_len);

foreach ($parts as $part) {

$decrypted_temp = '';

openssl_private_decrypt($part, $decrypted_temp,$this->private_key);

$decrypted .= $decrypted_temp;

}

return $decrypted;

}

/*

* 私钥

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java rsa加密数据大小_RSA加密解密(无数据大小限制,php、go、java互通实现) 的相关文章

  • 【计算机视觉】InvaSpread 讲解

    任何的书写错误 排版错误 概念错误等 希望大家包含指正 在阅读本篇之前建议先学习 机器学习 噪声对比估计 NCE 计算机视觉 MoCo 讲解 计算机视觉 InstDis 讲解 InvaSpread 在 InvaSpread 中 负样本的个数
  • 点云数据学习总结之一:点云数据存储格式

    最近研究点云数据 找了下相关的资料 看了许多的博文 下面总结了我认为比较写的比较好的博文链接 有需要的可以看下 刚刚才研究 所以可能不全 欢迎大家补充 共同学习 同时 未避免转载的博客链接失效 所以对博客内容进行了截图 如果原博主觉得受到侵
  • RestHighLevelClient封装使用,Java调用ES客户端 [支持ES6.x]

    前言 之前做项目的时候 需要用到Es的操作 本来想使用EsJpa的 即SpringDataElasticsearch 结果项目采用的是SpringBoot1 x版本 不得已 只要自己封装RestHighLevelClient来使用 不过网上
  • 蓝桥杯python技能升级

    只通过了百分之40 后面超时了 给没有头绪的伙计们一个思路吧 也请大佬给一个更好的解题思路 import math n m map int input split max 0 此为加的最大点 当加的次数小于0的时候 return0 if m
  • el-select下拉框只回显value不回显label的原因以及解决方法

    el select的采用的是map的key value结构 因此只显示value而不显示label的原因是 value的类型不正确 只需要在回显之前加上一行代码 将这个value转换成对应的类型即可 我这个里面需要的int类型 因此转成in
  • 集合相似度(PAT)

    题目链接 https www patest cn contests gplt L2 005 一开始用map超时了 总是有一组数据超时 当时觉得很纳闷 后来学到了 其实set也是可以开数组的 map也是 include
  • ubuntu 下安装chrome浏览器

    1 将google chrome stable current amd64软件复制移动到家目录下 2 打开终端 路径在家目录下 3 依次运行下面三条命令 sudo apt get install google chrome stable s
  • Swift的几种传值方式

    传值方式 在进行页面跳转过程中无法避免需要进行值的传递 那么值的传递可以分为正向传值和反向传值 例如在SourceViewController跳转至DestinationViewController的过程中需把前者的属性值传递给后者称为正向
  • 【系列 1】手写vue响应式原理

    手写vue响应式原理 首先我们看看原生 vue 做了什么 可见 vm 第一层与 data 内都能获取到 data 数据 并且其数值都进行了 ge
  • 王道训练营-C语言-1

    1 字符 include
  • 【热门框架】Maven中聚合,继承指的是什么?有什么作用?

    Maven中的聚合和继承是两个重要的功能 用于管理多个项目的共同部分 1 聚合 Maven中的聚合 Aggregation 指的是将多个子项目聚合成一个父项目的过程 聚合的语法如下 xml
  • 数据库初探(1)————关于InnoDB和MyISAM两种数据库存储引擎

    1 mysql中最常见的两种数据库引擎 InnoDB存储引擎 InnoDB存储引擎是Mysql的默认事务引擎 也是最重要 使用最广泛的存储引擎 它被设计用来处理大量的短期事务 短期事务大部分情况下都是可以正常提交的 很少回滚 MyISAM存
  • 【超详解】JavaWeb三大组件讲解

    文章目录 前言 一 Servlet 二 Filter 三 Listener 总结 前言 JavaWeb三大组件指的是 Servlet Filter Listener 三者提供不同的功能 然而很多人可能只用过其中一个或者两个 Servlet
  • 创建React项目

    在开发React项目前最关键的当然是项目的创建 现在的前端工程化使得前端项目的创建也变得越来越复杂 在这里介绍三种从零开始创建React项目的方式 分别是在浏览器中直接引入 使用官方脚手架create react app 使用Webpack
  • 不会盗QQ,还当什么程序员?

    上面这个段子估计很多朋友都看过 程序员被黑过无数次 在其他人眼中 仿佛我们需要写得了木马 翻得了围墙 修得了电脑 找得到资源 但凡是跟计算机沾点边的 咱都得会才行 段子归段子 言归正传 对于咱们程序员来说 多多少少了解一些信息安全的技术知识
  • 打印HashMap的方法分享

    HashMap简介 Hash Map是哈希表基于 Map 接口的实现类 HashMap用于存储数据 允许使用null值和null键 除了非同步和允许使用 null 之外 HashMap 类与 Hashtable 大致相同 HashMap不保
  • 区块链三加一:什么是量化交易

    量化交易是指以先进的数学模型替代人为的主观判断 利用计算机技术从庞大的历史数据中海选能带来超额收益的多种 大概率 事件以制定策略 极大地减少了投资者情绪波动的影响 避免在市场极度狂热或悲观的情况下作出非理性的投资决策 量化交易 有时候也称自
  • Kali Linux Armitage生成被控端和主控端

    目录 说明 使用 Armitage生成被控端和主控端 说明 按照 Kali Linux2 网络渗透测试实践指南 第二版 第八章操作 仅供学习讨论使用 请勿进行非法操作 使用 Armitage生成被控端和主控端 选中 payload 然后选择
  • 深入解析锂电池保护电路工作原理

    1 锂离子电池介绍 锂离子电池是一种二次电池 充电电池 它主要依靠锂离子在正极和负极之间移动来工作 在充放电过程中 Li 在两个电极之间往返嵌入和脱嵌 充电时 Li 从正极脱嵌 经过电解质嵌入负极 负极处于富锂状态 放电时则相反 锂离子电池

随机推荐

  • 对象不支持“addEventListener”属性或方法 ie8 jquery

    解决方法 1 请查看你使用的jquery版本 2 jQuery 2 x 已经不支持IE9以下的IE浏览器 如果你想继续支持IE6 7 8 请使用jQuery 1 x版本 最新版本 jQuery 1 11 0 3 如果要兼容 IE 6 7 8
  • 假设检验/T检验/F检验/Z检验/卡方检验

    显著性水平 一个概率值 原假设为真时 拒绝原假设的概率 表示为 alpha 常用取值为0 01 0 05 0 10 什么是P值 p值是当原假设为真时样本观察结果及更极端结果出现的概率 如果P值很小 说明这种情况发生的概率很小 如果这种情况还
  • react面试题(三)

    1 setState 何时同步何时异步 1 setState 只在合成事件 react为了解决跨平台 兼容性问题 自己封装了一套事件机制 代理了原生的事件 像在jsx中常见的onClick onChange这些都是合成事件 和钩子函数 生命
  • hive遇到的错误

    1 数据库的命名不能用数字开头 0 jdbc hive2 192 168 171 151 10000 gt create database 0328 不区分大小写字母 Error Error while compiling statemen
  • 离散数学期末复习-求主范式

    文章目录 析取范式与合取范式 定义 简单析取式 析取式 简单合取式 合取式 析取范式 合取范式 范式 公式A的析取范式 公式A的合取范式 命题公式的范式 求公式A的范式的步骤 求公式的范式举例 极大项与极小项 定义 主析取范式与主合取范式
  • 银河麒麟操作系统(kylin os)学习

    poweroff 关机命令 sudo su 进入超级用户 su username 切普通用户 Ctrl Alt t 打开终端terminal窗口 Ctrl Alt d 最小化全部应用 然后显示桌面 dpkg i libqt5 deb 安装d
  • 安卓app与阿里云服务器的无线通信(非局域网)

    参考 安卓app与阿里云服务器的无线通信 非局域网 作者 图触靓 发布时间 2020 08 01 16 13 14 网址 https blog csdn net bhbhhyg article details 107732156 目录 写在
  • react学习笔记9:循环处理和数组map函数

    为什么80 的码农都做不了架构师 gt gt gt 在我们实际开发中 循环是必不可少的 尤其在表格中的数据显示 我们会把ajax的json数据显示在表格中 1 一个最简单的例子 import React from react import
  • STM32与FPGA之间的SPI通讯

    STM32与FPGA之间的SPI通讯 SPI通讯协议 SPI协议物理层 协议层 STM32的SPI特性及架构 STM32的SPI架构 SPI初始化结构体 STM32标准库 STM32实验代码 FPGA从机代码编写 实验结果 SPI通讯协议
  • 车间束流变压器定标-2021.2.3

    标定了这么多次 感觉这是最来劲的一次 就兴奋的贴在这里了 无他 因为国产精品示波器的使用 试了一下极限 结果喜人 眼神好的留意一下最后一幅图 看看惊不惊艳 惨不忍睹的顶降还是无视吧 加工的这一批次的磁环太丿了 车间束流变压器定标 2021
  • Ubuntu安装SSH/FTP/NFS

    sudo apt get update 一 SSH sudo apt get install openssh server sudo ps e grep ssh 有出现sshd说明ssh服务已经启动 负责执行 sudo service ss
  • 在Windows和树莓派之间通过WinSCP传送文件,并开启root用户远程登录。

    目录 下载WinSCP工具 设置树莓派root用户密码 打开root远程登录的权限 可选 使用WinSCP远程登录 下载WinSCP工具 要想在Windows和树莓派之间传输文件 我们需要借助一个工具WinSCP WIn指的是Windows
  • 【VUE】vue组件之间通信有几种方式

    vue组件之间通信可分为以下几种 props和 emit 也就是常说的父子组件通信 常用 attrs和 listeners 中央事件总线 非父子组件间通信 v model provide和inject parent和 children vu
  • 新手编写IntelliJ IDEA插件

    需求目的 可能你会想什么场景会需要用到插件开发 其实插件开发算是一种通用的解决方案 由服务平台定义标准让各自使用方进行自需的扩展 这就像我们非常常用的 P3C 代码检查插件 代码审计插件 脚手架工程创建插件 自动化API提取插件 单元测试统
  • Scribe配置文件解析

    Scribe的配置文件由全局的section和一个或多个store的section组成 这篇来了解一下scribe的配置文件 在源码包的examples目录下有多个配置文件实例 examples example1 conf 模拟服务端 ex
  • 缺失值处理 - 拉格朗日插值法 - Python代码

    目录 缺失值处理 拉格朗日差值法的理论基础 拉格朗日插值法代码实现 其他数据预处理方法
  • 【Git】Git复习

    常用的Linux命令 1 cd 改变目录 2 cd 回退到上一个目录 直接cd进入默认目录 3 pwd 显示当前所在的目录路径 4 ls ll 都是列出当前目录中的所有文件 只不过ll 两个ll 列出的内容更为详细 5 touch 新建一个
  • python3把jpg png图片转换为ico图标

    环境ubuntu 20 04系统 python3 需要安装PythonMagick 然后可以直接调用PythonMagick包了 window暂时没有测试 sudo apt get install y python3 pythonmagic
  • 手把手带大家搭建一台服务器(腾讯云为例)

    今天带大家入门如何搭建服务器 主要是面向小白读者 先说好 我自己也不是专业做后端的 只不过平时爱折腾点项目玩玩 所以有点小经验 本文就是基于这点小经验讲解的 如有不当之处还请谅解 一 什么是服务器 这个问题被问过不止10次 对于小白来说服务
  • java rsa加密数据大小_RSA加密解密(无数据大小限制,php、go、java互通实现)

    RSA加解密中必须考虑到的密钥长度 明文长度和密文长度问题 明文长度需要小于密钥长度 而密文长度则等于密钥长度 因此当加密内容长度大于密钥长度时 有效的RSA加解密就需要对内容进行分段 这是因为 RSA算法本身要求加密内容也就是明文长度m必