在 PHP 中加密 (mcrypt),在 Ruby 中解密 (OpenSSL::Cipher)

2023-12-12

我正在开发一个跨语言项目,用 PHP 封装 ruby​​/Sinatra API 以供另一个团队使用。 API 公开的信息均不敏感,但我们希望猜测 URL 的临时观察者不易访问这些信息。

    private function generateSliceIDToken($key){
    $currentEpoch = time();
    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
    $encryptedBytes = mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128,
        $key,
        $currentEpoch.**Passcode**,
        MCRYPT_MODE_CBC, $iv
    );
    $ivAndEncryptedBytes = $iv . $encryptedBytes;

    return urlencode(urlencode(base64_encode($ivAndEncryptedBytes)));

上面的代码使用 mcrypt 的 RIJNDAEL 实现加密密码和时间戳并对其进行编码以发送到 ruby​​ API

if identifier.validate_token Base64.decode64(URI.unescape( URI.unescape(params[:token])))

西纳特拉抓取它并解码它

def validate_token(token)
  cipher = OpenSSL::Cipher::AES.new(128, 'CBC')
  cipher.decrypt
  cipher.key = **key**
  cipher.iv = token[0,16]

  plain = cipher.update(token[16..-1]) + cipher.final
  return plain[10,8] == **Passcode**
end

并将其传递给解密

问题是,解密失败并出现“错误解密”错误

我被引导相信 Mcrypt 的 RIJNDAEL 和 Cipher 的 AES 是兼容的,但这个假设不正确吗?我能得到的任何帮助都会是最有帮助的。


我被引导相信 Mcrypt 的 RIJNDAEL 和 Cipher 的 AES 是兼容的,但这个假设不正确吗?

您需要稍微调整正在编码的数据以使其兼容 AES。数据必须正确填充,字符和数量取决于其当前宽度:

$encode = $currentEpoch.'**Passcode**';
$len = strlen($encode);
$pad = 16 - ($len % 16);
$encode .= str_repeat(chr($pad), $pad);

还记得有$key正好 16 个字符长。如果它更短,ruby 会抛出 CipherError,而 php 会用空字节填充密钥。如果更长,Ruby 仅使用前 16 个字符,但 php 会再次填充它,并使用后 16 个字符。

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

在 PHP 中加密 (mcrypt),在 Ruby 中解密 (OpenSSL::Cipher) 的相关文章

  • RuntimeException - 会话存储未根据请求设置 - Laravel Socialite - Facebook

    我在用着Laravel 5 7 and Laravel Socialite 3 1 我想使用登录Facebook我刚刚为此项目配置了应用程序 这些是我为此配置的主要文件 env FACEBOOK CLIENT ID FACEBOOK CLI
  • 迭代比线性代码慢吗?哪一个更可取?

    最近几天我脑子里一直有一个问题 在用 ruby 编写代码时 线性代码是否比迭代更快 更好 让我举个例子 有一个用于相同功能的代码块以两种不同的方式编写 Way 1 dog cat tiger each do pet name puts I
  • 确定 PHP 到目前为止执行了多长时间

    我需要确定 PHP 函数到目前为止已经运行了多长时间 有哪些选项可以确定某些 PHP 代码的运行时间 我正在使用 zend 框架 Call microtime true 函数以毫秒分辨率获取当前时间
  • 如何告诉 Ruby 不要序列化属性或如何正确重载 marshal_dump?

    我的 AR B 中有一个不可序列化的属性 o Discussion find 6 Marshal dump o TypeError no marshal dump is defined for class Proc from irb 10
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 适用于 .NET 的 32 位分组密码

    我需要加密 32 位整数 以便它们由 32 位整数表示 是否可以使用 32 位块大小的块密码 以便输出为 32 位 我目前正在使用 DES 但结果是 64 位整数 我不想使用 XOR 加密作为最后的手段 Skip32 这是一个基于鲣鱼算法
  • PHP:解析器 asp 页面 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 早上好 我可以用 php 解析一个
  • Laravel 5.7:维护模式的自定义刀片模板,但不是 503.blade.php

    每次php artisan down开启后 Laravel 显示 503 页面 好的 我可以通过创建名为的新文件来自定义它503 blade php inside resources views errors 关键是 我在任何时候都不认为维
  • WordPress 子主题 -functions.php 复制 - 无法“重新声明”

    我正在使用带有儿童主题 starkers child 的 Starkers 我需要编辑functions php来声明一个菜单 所以我复制了functions php JS文件夹和external文件夹 它们都在functions文件中的某
  • 如何查找重复字母最多的单词

    我的目标是找到给定字符串中重复字母最多的单词 例如 aabcc ddeeteefef iijjfff 会回来 ddeeteefef 因为 e 在这个单词中重复了五次 这比所有其他重复字符都多 到目前为止 这是我得到的 但它有很多问题并且不完
  • Rails 2.3.14:如何序列化 ActionController::Request 对象?

    我需要编写一些根据 Rails 2 3 14 控制器收到的请求对象类型执行操作的方法 但是 我不想启动整个应用程序 甚至不想启动控制器 我只想拥有这样一个对象的编组副本 以便我可以在 Rails 环境之外使用 不幸的是 ActionCont
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • Monolog:通过邮件发送错误日志会导致每个发送的错误都会收到一封额外的邮件

    对于通过邮件发送的每个错误日志 我们都会收到另一封额外的电子邮件 其中包含 2 行 smtp 调试日志消息 新创建的 symfony 演示 symfony new demo 配置独白以通过邮件发送错误消息 如docs https symfo
  • H2数据库:如何进行加密保护,而不暴露文件加密密钥

    我们在服务器模式下使用Java H2数据库 因为我们不希望用户访问数据库文件 为了对数据库文件添加更多保护 我们计划使用 AES 加密 将 CIPHER AES 添加到数据库 URL 以防存储被盗 但是 每个用户在连接时还需要提供文件保护密
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 如果数组包含一个或多个相同值,则合并数组

    我有一个数组数组 a 1 2 3 3 4 5 6 7 8 8 9 9 10 我想合并包含一个或多个相同值的所有数组 所以 a 1 2 3 4 5 6 7 8 9 10 我正在努力寻找一种简洁的方法来解决这个问题 有任何想法吗 我相信这是正确
  • 多维数组 PHP 内爆 [重复]

    这个问题在这里已经有答案了 就我的数据结构而言 我有一个 communications 数组 每个 communications id 本身包含三部分信息 id score 和 content 我想内爆这个数组以获得逗号分隔的 id 列表
  • PHP 使用主键和辅助键对多维数组进行排序[重复]

    这个问题在这里已经有答案了 如何按主键和辅助键对多维数组进行排序 例如 假设有以下数组 result array result 0 prio 1 result 0 date 2010 02 28 result 0 post February
  • 在Ruby中从csv文件中获取第二行[重复]

    这个问题在这里已经有答案了 actual row File open file name 0 r first row data CSV foreach actual row do row first row data lt lt row 1
  • Ruby:基于控制台的菜单

    我有一个名称和 URL 数组 并希望以向上 向下滚动菜单的形式向用户呈现名称列表 基本上是什么dialog允许在外壳内 我调查过ncurses ruby rdialog and HighLine但它们似乎要么作为一个项目被放弃 要么甚至从它

随机推荐

  • Flink:行时间属性不得位于常规联接的输入行中

    使用 flink SQL API 我想将多个表连接在一起并在时间窗口内进行一些计算 我有 3 个来自 CSV 文件的表 一个来自 Kafka 在卡夫卡表中 我有一个字段timestampMs 我想将其用于我的时间窗口操作 为此 我执行了以下
  • 合并树节点

    有谁知道一种按以下方式合并树节点的算法 treeA child a node abc child b node xyz treeB child a node qrs child b node xyz node pdq child c nod
  • 多个访问者可以共享同一个IP地址吗?

    是否有可能两个设备同时访问我的网站时存在重复的 IP 地址 这就是我获取IP地址的方法 SERVER REMOTE ADDR 是的 如果它们位于执行 NAT 的防火墙后面 则所有连接可能来自多个客户端 但似乎源自同一 IP 地址
  • Android 使用 HttpPost/HttpGet 发送照片

    我需要将存储在 SDCARD 中的文件中的照片发送到外部 Api 为了做到这一点 我使用以下代码 String responseStr null this setMethod request this setParameters tags
  • 子查询在mysql中返回多于1行

    我正在执行以下查询并收到错误 子查询返回超过 1 行 我的查询是 SELECT pkTicketID TicketReplyDateAdded TIMESTAMPDIFF DAY TicketReplyDateAdded now as Nu
  • 最大限度地提高 Google Play 服务的向后兼容性

    在依赖 Google Play 服务的同时保持 Android 应用程序最广泛的向后兼容性的建议做法是什么 使用 Android Studio 的开发人员实现文档表明针对 v5 进行编译compile com google android
  • SQL脚本中的Week()函数

    我正在使用 sql server 2005 我只是想知道我们是否可以获取特定月份的周数 例子Date 2008 10 16 有什么我们可以拥有的吗SELECT WEEK Date 或者有什么更好的建议 select datepart dd
  • 从 Databricks Notebook 发送带有附件的电子邮件

    我是 Python 和 Spark 世界的新手 我正在尝试构建一个 pyspark 代码 以从 Databricks 发送电子邮件以及来自安装点位置的附件 我使用下面的代码来实现相同的 import smtplib from pathlib
  • MATLAB 中的拉盖尔多项式

    我尝试在 MATLAB 中使用 命令生成拉盖尔多项式 但每次都会收到此错误 I found this in the help section 既然我已经定义了x作为象征性的我不应该得到这个错误 Also on website I found
  • 如何在openssl中启用EVP功能?

    我正在尝试使用 heartbleed 补丁 1 0 1g 将我的网络服务器更新到最新的 openssl 我从 openssl org 获取了 tarball 平常说的 configure make make install 不得不说conf
  • Java - 获取 JSONObject 时出现 NullPointerException

    我正在尝试使用以下方法在我的 Android 应用程序中实现登录功能卢肯代码的 RestClient 类 我有一个名为UserFunctions通过 RestClient 检索 JSONObject public class UserFun
  • mysql where 精确匹配

    当我写这个查询时 SELECT cd title cd city FROM coupon detail cd WHERE cd id 260 return title city Butterfly world Mohali 当我写的时候 S
  • GWT:使用外部 Jar

    我试图弄清楚如何在 GWT 项目中使用外部 jar 我提到http www vogella com articles GWTModules article html它工作得很好 但该示例解释了使用 GWT 项目的构建路径中包含的另一个项目
  • 邪恶合并在 git 中?

    man 吉特词汇表 包含以下定义邪恶合并 邪恶的合并是引入未出现的更改的合并 在任何父母身上 我不确定我是否理解作者想要表达的观点 为什么是邪恶的呢 因为它将没有人要求的东西放入代码中 就好像你有这段代码 foo bar baz qxx 和
  • 在基于 C 的编程难题中调试 switch 语句

    我遇到了这个谜题here 我不明白为什么NONE未打印 有任何想法吗 include
  • 如何在 ASP.NET Web 应用程序中显示 Windows.Form.MessageBox?

    我想在 MessageBox 中显示验证错误消息 我有四个文本框和一个按钮控件 当我单击按钮控件时 没有文本的文本框将显示在消息框中 我几乎已经做到了这一点 但问题是当我单击按钮时 消息框将作为最小化窗口打开 所以最终用户很难意识到 我想在
  • 在 Angular2 中动态创建输入表单

    我试图提示用户为他们想要的每位客人填写一张表格 只需姓名 年级和年龄 我首先问他们想要多少客人 然后在下一页上我想向用户显示那么多表单 像这样
  • 为什么当“if not []”成功时“[] == False”的计算结果为False?

    我问这个是因为我知道检查列表是否为空的Pythonic方法如下 my list if not my list print computer says no else my list isn t empty print computer sa
  • 如何在 Google 图表中使用带有触发器的 HTML 工具提示:'both'

    当用户单击悬停栏时 我必须显示 HTML 工具提示 使用 Google 图表 我已经对此进行了编码 并且当用户悬停栏时它显示工具提示
  • 在 PHP 中加密 (mcrypt),在 Ruby 中解密 (OpenSSL::Cipher)

    我正在开发一个跨语言项目 用 PHP 封装 ruby Sinatra API 以供另一个团队使用 API 公开的信息均不敏感 但我们希望猜测 URL 的临时观察者不易访问这些信息 private function generateSlice