PHP RSA密文过长加密解密 越过1024的解决代码-PHP RSA分段加密解密

在PHP中,RSA证书的大小(通常是密钥的长度,如1024位、2048位或更高)是由你生成的密钥对或你获得的证书决定的。RSA算法有一个固定的加密数据块大小限制,这取决于密钥的长度和所使用的填充方案。例如,对于PKCS#1 v1.5填充,加密的数据块大小通常小于密钥长度(以字节为单位)减去11(对于SHA-1)或减去41(对于SHA-256)。

由于这个限制,当你要加密的数据超过这个限制时,你需要将数据分段,并对每一段分别进行加密。

依赖的PHP扩展

首先确保你的PHP环境中安装了OpenSSL扩展。

sudo apt-get install php-openssl

分段RSA加密

function rsa_encrypt_segments($data, $publicKey, $padding = OPENSSL_PKCS1_PADDING) {  // 获取公钥的详细信息  $publicKeyDetails = openssl_pkey_get_details(openssl_pkey_get_public($publicKey));  $keyBits = $publicKeyDetails['bits'];  $maxBytes = intval($keyBits / 8) - 11; // 减去填充和哈希字节(假设使用SHA-1)  // 如果使用SHA-256或其他哈希算法,可能需要减去更多字节  // $maxBytes = intval($keyBits / 8) - 41; // 假设使用SHA-256  $encrypted = '';  // 分割数据为较小的块  for ($offset = 0; $offset < strlen($data); $offset += $maxBytes) {  $chunk = substr($data, $offset, $maxBytes);  // 如果最后一个块小于$maxBytes,则只加密该块  if (strlen($chunk) < $maxBytes && $offset + $maxBytes > strlen($data)) {  $chunk = substr($data, $offset);  }  $encryptedChunk = '';  if (openssl_public_encrypt($chunk, $encryptedChunk, $publicKey, $padding)) {  $encrypted .= $encryptedChunk;  } else {  // 处理错误  return false;  }  }  return base64_encode($encrypted); // 返回base64编码的加密数据  
}  // 示例使用  
$publicKey = file_get_contents('path_to_public_key.pem');  
$data = 'your_long_data_here';  
$encryptedData = rsa_encrypt_segments($data, $publicKey);

分段RSA解密

function rsa_decrypt_segments($encryptedData, $privateKey, $padding = OPENSSL_PKCS1_PADDING) {  $decrypted = '';  // 先进行base64解码  $decodedData = base64_decode($encryptedData);  // 获取私钥的详细信息(虽然这里不需要,但为了完整性)  $privateKeyDetails = openssl_pkey_get_details(openssl_pkey_get_private($privateKey));  $keyBits = $privateKeyDetails['bits'];  $maxBytes = intval($keyBits / 8); // 解密时通常不需要减去填充和哈希字节,但需要处理填充  // 假设加密数据时使用的是固定的块大小进行加密  for ($offset = 0; $offset < strlen($decodedData); $offset += $maxBytes) {  $chunk = substr($decodedData, $offset, $maxBytes);  $decryptedChunk = '';  if (openssl_private_decrypt($chunk, $decryptedChunk, $privateKey, $padding)) {  $decrypted .= $decryptedChunk;  } else {  // 处理错误  return false;  }  // 去除可能的填充字符(PKCS#1 v1.5填充)  // 注意:这里只是简单地去掉最后一个可能的填充字符,实际情况可能需要更复杂的处理  $decrypted = rtrim($decrypted, "\0");  }  // 如果使用PKCS#1 v1.5填充,并且数据被正确填充,上面的rtrim调用可能已经足够了  // 但如果是OAEP填充或其他填充方式,则需要更复杂的处理  return $decrypted;  
}  // 示例使用  
$privateKey = file_get_contents('path_to_private_key.pem');  
$decryptedData = rsa_decrypt_segments($encryptedData, $privateKey);

注意

  1. 在解密时,需要确保能够正确处理填充。在上面的示例中,我简单地使用了rtrim来去除末尾的\0字符,这是PKCS#1 v1.5填充的一个常见做法。但是,如果你的数据使用了不同的填充方式(如OAEP),那么你需要使用更复杂的逻辑来处理填充。

  2. 当处理大量数据时,分段加密和解密可能会引入性能问题。如果可能的话,考虑使用更高效的加密方案,如AES,并结合RSA来安全地传输密钥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能鼠类监测设备

TH-SH1在人类社会与自然环境共存的过程中&#xff0c;鼠类作为一类常见的害虫&#xff0c;给我们的生活、生产带来了诸多不便。为了更好地控制鼠害&#xff0c;科学家们不断研发出各种高效的监测与防控设备。近期&#xff0c;一款全新的鼠类监测设备崭露头角&#xff0c;其能够…

python基础语法学习(工程向)-Stage3-数据可视化

json 是一种轻量的数据交互格式&#xff0c;可以按照json指定的格式去组织和封装数据&#xff0c;而本质上是一个带有特定格式的字符串。 功能 json是在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言之间的数据传递和交互。 格式 json的格式要求较为严格&#…

九、数据结构(并查集)

文章目录 1.并查集操作的简单实现2.解决问题3. 并查集优化3.1 合并的优化3.2查询优化3.3查询优化2 通常用“帮派”的例子来说明并查集的应用背景&#xff1a;在一个城市中有 n ( n < 1 0 6 ) n(n < 10^6) n(n<106)个人&#xff0c;他们分成不同的帮派&#xff0c;给出…

华为HCIP Datacom H12-821 卷6

1.单选题 下面是一台路由器的部分配置&#xff0c;关于该部分配置描述正确的是&#xff0c;[HUAWEllJip ip-prefix plpermit 10.0.192.0 8 greater-equal 17 less-equal 18 A、10.0.192.0/8 网段内&#xff0c;掩码长度为 20 的路由会匹配到该前缀列表&#xff0c;匹配规则为…

餐饮点餐系统小程序(ThinkPHP+FastAdmin+UniApp)

便捷美食新体验&#x1f354;&#x1f4f1; 基于ThinkPHPFastAdminUniApp开发的餐饮点餐系统&#xff0c;主要应用于餐饮&#xff0c;例如早餐、面馆、快餐、零食小吃等快捷扫码点餐需求&#xff0c;标准版本仅支持先付款后就餐模式&#xff0c;高级版本支持先付后就餐和先就餐…

C语言---自定义类型:结构体

结构体回顾 结构体 自定义的类型&#xff1a;结构体、联合体、枚举 结构是一些值的集合&#xff0c;这些值成为成员变量&#xff0c;结构的每个成员可以是不同类型的变量 //描述一本书&#xff1a;书名、作者、定价、书号//结构体类型---类似于整型、浮点型 struct Book {c…

QMultiMap使用详解

QMultiMap使用详解 一、QMultiMap特性二、创建和初始化2.1 创建空的 QMultiMap2.2 使用初始值创建 QMultiMap 三、插入和移除数据3.1 插入数据3.2 移除数据 四、查找和遍历数据4.1 查找某个键的所有值4.2 查找某个键对应的第一个值4.3 查找某个值对应的所有键4.4 检查是否包含某…

使用 Vue CLI 脚手架生成 Vue 项目

最近我参与了一个前端Vue2的项目。尽管之前也有过参与Vue2项目的经验&#xff0c;但对一些前端Web技术并不十分熟悉。这次在项目中遇到了很多问题&#xff0c;所以我决定借此机会深入学习Vue相关的技术栈。然而&#xff0c;直接开始深入钻研这些技术可能会显得枯燥&#xff0c;…

AI工具快速制作爆火的影视视频混剪

今天给大家发一个有意思的工具&#xff0c;影视混剪大家应该都刷到过&#xff0c;像下面这种视频&#xff0c;播放量都超级高。 这种视频都是怎么做的呢&#xff1f; 现在AI工具这么多样性&#xff0c;先用 AI 写一段具有网感的对话段子&#xff0c;然后找影视剧片段混剪成一…

【Vue】封装组件的过程

文章目录 方式一方式二 首先&#xff0c;组件可以提升整个项目的开发效率。能够把页面抽象成多个相对独立的模块&#xff0c;解决了我们传统项目开发&#xff1a;效率低、难维护、复用性等问题。 方式一 Vue封装组件的过程通常包括以下几个步骤&#xff0c;这些步骤旨在创建可…

反激开关电源压敏电阻选型及计算

作用:在浪涌时间里面吸收一个很高的浪涌电压 压敏电阻对电压敏感&#xff0c;有变阻电压阈值 在电压阈值以下&#xff0c;表现出阻抗很大&#xff0c;超过电压阈值&#xff0c;表现出阻抗很小 压敏的选型及计算 压敏电阻的作用是抑制来自电源在异常时的尖峰电压和瞬态过电压&a…

四川音盛佳云电子商务有限公司引领商业新潮流

在当今这个数字化飞速发展的时代&#xff0c;电商行业正以其独特的魅力吸引着越来越多的目光。而在众多电商企业中&#xff0c;四川音盛佳云电子商务有限公司凭借其专业、专注的抖音电商服务&#xff0c;逐渐崭露头角&#xff0c;成为行业的佼佼者。 四川音盛佳云电子商务有限…

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中&#xff0c;总会遇到与分词相关的需求&#xff0c;这里将针对常用的elasticsearch hanlp&#xff08;后面统称为 es …

gradio快速入门 — Interface状态

目录 全局状态会话状态 到目前为止&#xff0c;我们假设您的演示是无状态的&#xff1a;它们不会保留单个函数调用以外的信息。如果您想根据与演示的先前交互来修改演示的行为&#xff0c;该怎么办&#xff1f; Gradio 中有两种方法&#xff1a;全局状态和会话状态。 全局状态…

【Docker实战】jenkins卡在编译Dockerfile的问题

我们的项目是标准的CI/CD流程&#xff0c;也即是GitlabJenkinsHarborDocker的容器自动化部署。 经历了上上周的docker灾难&#xff0c;上周的服务器磁盘空间灾难&#xff0c;这次又发生了jenkins卡住的灾难。 当然&#xff0c;这些灾难有一定的连锁反应&#xff0c;是先发生的d…

MR高空作业情景仿真模拟

MR混合现实情景实训教学系统为学生提供身临其境的体验&#xff0c;使他们能够更好地理解和掌握高空作业的技能和知识。 混合情景实训教学课堂体验&#xff1a; 高空模拟训练&#xff1a;学生可以在虚拟环境中进行模拟训练&#xff0c;熟悉各种高空作业设备的操作和使用方法&…

基准电压端口,需要外接退耦电容为什么

基准电压端口是模拟电路中的一个重要组成部分&#xff0c;它提供了一个稳定的参考电压&#xff0c;用于电路中的比较、放大和其他模拟信号处理功能。在许多集成电路&#xff08;IC&#xff09;中&#xff0c;都会有一个或多个基准电压引脚&#xff0c;这些引脚需要连接到一个稳…

简单通用防篡改水印组件封装(vue3)

一、项目结构 二、项目代码 1.App.vue <template><div class"container"><Watermark text"版权所有"><div class"content"></div></Watermark><Watermark text"禁止转载" style"backgr…

数据资产赋能智能决策:通过深度挖掘数据资产价值,构建全面智能决策支持系统,精准分析,辅助决策,显著提升企业决策质量与效率,推动业务快速发展

一、引言 在信息化和数字化飞速发展的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅记录着企业的历史运营轨迹&#xff0c;更蕴含着企业未来发展的无限可能。然而&#xff0c;如何深度挖掘数据资产的价值&#xff0c;将其转化为推动企业发展的动力&#xff0…

头歌大数据答案(自用)

第一关 # 命令行 start-all.sh nohup hive --service metastore &import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions.col import org.apache.spark.sql.functions._ object cleandata {def main(args: Array[String]): Unit {//创建spark…