使用 TripleDes、PKCS7 和 ECB 进行 PHP 加密/解密

2023-12-28

我的加密函数工作正常,但是我不知道如何让解密函数给出正确的输出。

这是我的加密函数:

function Encrypt($data, $secret)
{    
  //Generate a key from a hash
  $key = md5(utf8_encode($secret), true);

  //Take first 8 bytes of $key and append them to the end of $key.
  $key .= substr($key, 0, 8);

  //Pad for PKCS7
  $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
  $len = strlen($data);
  $pad = $blockSize - ($len % $blockSize);
  $data .= str_repeat(chr($pad), $pad);

  //Encrypt data
  $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

  return base64_encode($encData);

}

这是我的解密函数:

function Decrypt($data, $secret)
{
    $text = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $secret, $text, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $pad   = ord($data[($len = strlen($data)) - 1]);

    return substr($data, 0, strlen($data) - $pad);
}

现在我正在使用的密钥test我正在尝试加密1234567。我从我正在寻找的加密中获得了 Base64 输出,但是当我去解密时,它什么也没有返回(空白区域)。

我不太精通加密/解密,所以非常感谢任何帮助!


感谢任何看过我的问题的人。我想我已经解决了,这是我的完整解决方案。希望它可以帮助其他遇到类似问题的人:

function Encrypt($data, $secret)
{    
  //Generate a key from a hash
  $key = md5(utf8_encode($secret), true);

  //Take first 8 bytes of $key and append them to the end of $key.
  $key .= substr($key, 0, 8);

  //Pad for PKCS7
  $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
  $len = strlen($data);
  $pad = $blockSize - ($len % $blockSize);
  $data .= str_repeat(chr($pad), $pad);

  //Encrypt data
  $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

  return base64_encode($encData);

}

这是新的解密函数。

function Decrypt($data, $secret)
{

    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    $data = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = ord($data[$len-1]);

    return substr($data, 0, strlen($data) - $pad);
}

在运行 mycrypt_decrypt 函数之前,我必须添加相同的代码来生成正确格式的密钥。

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

使用 TripleDes、PKCS7 和 ECB 进行 PHP 加密/解密 的相关文章

  • Monolog,如何将 PHP 数组记录到控制台?

    我正在使用浏览器处理程序将消息记录到 JS 控制台 require once vendor autoload php use Monolog Logger use Monolog Handler BrowserConsoleHandler
  • 通过php将mp3转换为ogg

    我有一个网站 用户可以上传音乐并将其转换为 mp3 但我需要 mp3 和 ogg 文件支持才能以 html5 播放音乐 那么 有没有可以将mp3转换为ogg的php脚本呢 使用 ffmpeg 您可以直接从 php 脚本执行命令
  • PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

    例如 contents file get contents image png 是否可以从 contents 创建 SplFileObject 对象 Thanks php 有一些特殊的流包装器 http www php net manual
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • 从 json 数组获取值并执行 sql 插入

    这是我的数组 json 1 Device ID a9a3346be4375a92 Date 2012 05 31 Time 15 22 59 Latitude 51 4972912 Longitude 0 1108178 2 Device
  • 匹配括号内任何字符的正则表达式

    尝试创建一个与括号内的任何字符匹配的正则表达式 我的正则表达式模式是这样的 preg match listanswer answer 括号内的所有字符串都是匹配模式 但问题是 当我尝试匹配例如 this word sample data 它
  • 如何在 Laravel 中 session_write_close() ?

    Running session write close before sleep 在 Laravel 中似乎不起作用 因为会话仍然被其他请求阻止 直到当前连接完成 我试图sleep 在 Laravel 中 不会阻止其他请求 发现 sessi
  • 如何使用 PHP 查找目录中的前 5 个文件?

    如何使用 PHP 列出按字母顺序排序的目录中的前 5 个文件或目录 Using scandir array slice array filter scandir path to dir is file 0 5 The array filte
  • Symfony 学说错误“DoctrineMigrationsBundle 需要启用 DoctrineBundle。”

    我创建了一个新的 Symfony 项目 并且不断收到此消息 DoctrineMigrationsBundle 需要启用 DoctrineBundle 错误并且无法摆脱它 显然我是这个星球上唯一一个收到此错误的人 因为谷歌并没有太大帮助 在
  • PHP,文本从数据库中回显,没有换行,全部一体

    我的数据库中有一个长文本 从 php mayadmin 来看它看起来很好 但是当我将它回显到页面时 它会丢失所有格式 即没有新行 全部都在一个块中 有任何想法吗 Thanks 可能是因为换行符是 n 并且 html 想要 br 所以使用nl
  • 如何在PHP中将图像从内存上传到AWS S3?

    所以我目前有一个使用 AWS S3 上传图像的上传系统 这是代码 Upload image to S3 s3 Aws S3 S3Client factory array key gt mykey secret gt myskey try s
  • PHP OOP 静态属性语法错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为什么不
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • 如何使用 DUKPT 加密在读卡器中生成密文?

    For BDK 0123456789ABCDEFFEDCBA9876543210 KSN FFFF9876543210E00008 生成的密文如下 C25C1D1197D31CAA87285D59A892047426D9182EC11353
  • Slim 3 - 斜杠作为路由参数的一部分

    我需要使用可以包含斜杠 的参数来编写 URL 例如 经典的 hello username 路线 默认情况下 hello Fabien将匹配此路线 但不匹配 hello Fabien Kris 我想问你如何在 Slim 3 框架中做到这一点
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数

随机推荐

  • SQL 中的分层控制范围报告,无需 Oracle CONNECT BY 语法?

    Summary 控制范围是指有多少员工向特定经理报告 直接和间接报告计数应分为各自的总数 还需要进行其他统计 包括组织中直接和间接报告的许多职位空缺 经理是指有其他职位向其报告的任何职位 需要从顶部到树中任何位置的报告路径flatten结构
  • 如何将新的 rvm 安装与现有的 ruby​​ 版本相关联?

    我的 RVM 出现问题 所以我卸载并重新安装它 事实是 我实际上尝试过 rbenv 但这对我来说不起作用 所以我尝试让 rvm 重新启动并运行 无需安装重复版本的 Ruby 我至少安装了 1 个现有版本的 Ruby ruby version
  • Google Cloud SQL 无法使用新用户连接到数据库

    我正在尝试使用 Cloud SQL 在 Google App Engine for PHP 上安装 WordPress 但是 我无法让我的 WP 数据库用户访问其数据库 查看我的 Cloud SQL 实例中的用户 未选中 root 帐户的授
  • 将数据导出到 Rails 中的 CSV [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 请建议:使用实体框架时的 SQL Server 标识与唯一标识符键

    我正在设计一个相当复杂的系统 我们主要关心的问题之一是支持 SQL Server 点对点复制 这个想法是支持多个地理上分离的节点 第二个问题是在中间层使用现代 ORM 我们的首选一直是实体框架 主要是因为开发人员喜欢使用它 他们喜欢 LiN
  • php mySQL 组 concat 和 group by

    我有两张桌子 table 1 row car id car model 1 1 CAR 1 2 2 CAR 2 3 3 CAR 3 4 4 CAR 4 table 2 row car id car features 1 1 Features
  • apache .htaccess 重写 - 我可以将其移至 httpd.conf 中吗

    下面是我的唯一代码 htaccess文件与apache 2 2 我读过 使用它会对性能产生影响 htacess如果这个可以用完就更好了httpd conf 因此我可以将其添加到httpd conf 如果是的话我会把它放在哪里 是否需要进入每
  • 如何为所有按钮设置不同的随机数?

    我的数组中有 4 个按钮 我能够生成一个随机数并将其设置为所有这些按钮 但这不是我打算做的 我真正想做的是为每个按钮设置一个随机数 例如 我可以在每个按钮中包含 18 15 10 和 11 而不是在所有四个按钮中包含 17 我如何为所有按钮
  • 实现动态滚动的算法

    创建动态滚动实现有哪些好的算法 该功能将在自定义 UI 列表上进行测试 虽然我的目标是移动设备 那些没有内置此功能的设备 但来自不同编程领域的任何算法或代码示例也可能适合 自从最初提出这个问题以来 我仔细阅读了 Pastrykit 的源代码
  • 使用 Bash 读取文件中的行并避免带有 # 的行

    我试过这个 file myfile while read r line do line continue address line 127 0 0 1 done lt file 此代码不会避免以注释开头的行 即使我没有任何意见 dnsmas
  • 如何删除通过类添加的操作

    我试图删除插件在单独的functions php 文件中注册的操作 但语法难倒了我 该插件 我无法复制 粘贴 商业插件 推断 add action 如下 class Plugin Class function add actions add
  • 如何在 Gemfile 中指定最低 Ruby 版本?

    我知道我可以在 Gemfile 中指定 Ruby 版本 如下所示 ruby 2 0 0 但是 我不想设置确切的 Ruby 版本 而是希望能够指定最低 Ruby 版本 以便我的脚本与新版本的 Ruby 保持兼容 您可以改为引发异常 raise
  • 为什么我的 sinon 存根表现得像是在调用真实函数?

    我正在尝试遵循这个例子 https www alexjamesbrown com blog development stubbing middleware testing express supertest https www alexja
  • 如何在 TypeScript 中使用 lodash.mixin

    我的团队正在评估将一些文件从 JavaScript 切换到 TypeScript 并且我们在代码中广泛使用了一些自定义 mixin 方法 从一些基本测试来看 虽然我们可以使用 mixin 按照规范创建 mixin 但我们无法在不出现编译错误
  • 如何修复 GIT 错误:HEAD:无效的引用日志条目 xxxxxxxxxxxxxxxx

    我之前遇到过错误 GIT错误 目标文件为空 然后我使用了中提到的方法如何修复 GIT 错误 目标文件为空 https stackoverflow com questions 11706215 how to fix git error obj
  • 以循环模式使用 tomcat

    我想在配置中运行我的 tomcat 实例 其中通过循环将请求提供给多个 tomcat 实例 我不想使用任何内部集群管理器 据我所知 如果每个请求都由不同的tomcat提供服务 则未知的sessionId将到达tomcat 因此它将被迫创建一
  • GKE:修改现有集群 - 删除节点标签并更改网络

    我使用以下 CLI 命令创建了 Kubernetes 集群 gcloud container clusters create some cluster tags some tag network some network 我现在想 禁用 t
  • R:使用 cat() 获得类似 Unix 的换行符 LF 写入文件

    我尝试将字符向量写入 Windows 7 R 3 2 2 x64 下的文本文件 并且我想要 unix LF 到 Windows CRLF v lt c a b c cat nl file textfile txt sep n writes
  • DestinationViewController Segue 和 UINavigationController swift

    所以我有一个像这样的prepareForSegue方法 override func prepareForSegue segue UIStoryboardSegue sender AnyObject if segue identifier f
  • 使用 TripleDes、PKCS7 和 ECB 进行 PHP 加密/解密

    我的加密函数工作正常 但是我不知道如何让解密函数给出正确的输出 这是我的加密函数 function Encrypt data secret Generate a key from a hash key md5 utf8 encode sec