正确的 PHP mcrypt 加密方法?

2023-12-05

好的,我尝试使用 PHP 创建自己的加密/解密方法mcrypt,当我不久前发布它们时,有些人称它们为“垃圾”。他们提到了“初始化向量”之类的事情。基本上,我怎样才能使这些加密方法更好:

function encrypt($key, $data){
    $encrypted_data = mcrypt_cbc(MCRYPT_RIJNDAEL_192, $key, $data, MCRYPT_ENCRYPT);
    return base64_encode($encrypted_data);
}

function decrypt($key, $encryptedData){
    $dec = base64_decode($encryptedData);
    $decrypt = mcrypt_cbc(MCRYPT_RIJNDAEL_192, $key, $dec, MCRYPT_DECRYPT);
    return trim($decrypt);
}

我希望这些能发挥最大作用,除非我是一个全新世界的鸭子mcrypt,欢迎任何建议,谢谢!


这是我使用的 mcrypt 函数的片段。他们使用mcrypt_generic and mdecrypt_generic,应根据PHP手册.

function encrypt($key, $data){
    $b = mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $enc = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($enc), MCRYPT_DEV_URANDOM);
    mcrypt_generic_init($enc, md5($key), $iv);

    // PKCS7 Padding from: https://gist.github.com/1077723
    $dataPad = $b-(strlen($data)%$b);
    $data .= str_repeat(chr($dataPad), $dataPad);

    $encrypted_data = mcrypt_generic($enc, $data);

    mcrypt_generic_deinit($enc);
    mcrypt_module_close($enc);

    return array(
        'data' => base64_encode($encrypted_data),
        'iv' => base64_encode($iv)
    );
}

function decrypt($key, $iv, $encryptedData){
    $iv = base64_decode($iv);
    $enc = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
    mcrypt_generic_init($enc, md5($key), $iv);

    $encryptedData = base64_decode($encryptedData);
    $data = mdecrypt_generic($enc, $encryptedData);
    mcrypt_generic_deinit($enc);
    mcrypt_module_close($enc);

    // PKCS7 Padding from: https://gist.github.com/1077723
    $dataPad = ord($data[strlen($data)-1]);

    return substr($data, 0, -$dataPad);
}

我不太了解mcrypt要么,所以我只是把它们拼凑在一起。我md5密钥,因此它始终是 32 个字符(最大密钥长度),并且我随机计算“初始化向量”。

Using PKCS7 填充更好,因为您可以使用以空格结尾的字符串(如trim会删除它),而且当字符串具有一定长度时,加密效率更高。

我在这里使用 AES 256 (MCRYPT_RIJNDAEL_256),但 AES 192 (MCRYPT_RIJNDAEL_192) 也可以。

Demo: http://ideone.com/WA5Tk

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

正确的 PHP mcrypt 加密方法? 的相关文章

  • 将字符串的第一个字母大写(前面带有特殊字符) - PHP

    我想将字符串大写 例如 hello 我希望我的函数返回 Hello 我尝试过使用 regex 和 preg match 但没有运气 这是我之前的问题 与此相关 preg match 正在匹配两个字符 而它应该只匹配一个字符 https st
  • 如何将对象(模型类型对象)插入到 Laravel 中 Collection 对象的特定索引号处?

    我读过戴尔 里斯的代码明亮 https daylerees com codebright 了解更多关于雄辩的信息Collection在 Laravel 中使用 还做了一些其他研究 但找不到我正在寻找的答案 我想插入一个对象 Model输入对
  • 使用 ImapMailbox.php 按日期对 Imap 邮箱进行排序

    我有一个客户支持系统 它会在收到电子邮件时创建电子邮件 我曾经使用后缀和特殊配置来获取电子邮件以添加额外的功能 例如 我想包含从电子邮件发送的附件 系统不会执行此操作 而是创建一封带有主题的电子邮件 因此我可以通过匹配主题来包含附件 我使用
  • 如何将JS/CSS文件包含到Slim框架的模板中?

    我正在使用 Slim 框架开发一个简单的网络应用程序 我遇到了一个可能很简单的问题 我想将静态文件 CSS 和 Javascript 包含到我的模板中 我的项目文件夹结构如下 index php lt where all the routi
  • 使用 CodeIgniter 加载视图文件夹外的视图

    我需要从以下范围之外加载视图 this gt load gt view 这似乎是从base application views目录 如何从外部访问视图 application 目录 我想我将不得不延长CI Loader class这是最好的
  • WooCommerce 自定义字段 - 多选

    我在 WooCommerce 的结账页面添加额外的字段 我可以添加文本框等基本字段 但需要添加一个 多 选择框 用户可以在其中选择多个项目 我已经弄清楚如何通过代码添加选择框 如下所示 add action woocommerce afte
  • 如何接收发送到 twilio 号码的短信

    我在 twilio 创建了一个免费帐户 用于通过我的网站发送短信 注册后 我得到了一个 twilio 号码 例如 XXX XXX XXXX 我可以向手机号码发送消息 但我不知道如何使用这个 twilio 号码接收短信 请帮我解决这个问题 T
  • 传递给 Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() 的参数 1 必须是以下实例

    我创建了一个新的中间件来检查用户令牌我创建了中间件然后添加到 kernal php 但是当我尝试访问中间件中的 request 时我收到错误 这是我的中间件代码 namespace App Http Middleware use Illum
  • FPM 与 apache2 无法工作(权限被拒绝)

    我正在尝试使用 apache fastcgi 和 fpm 设置一个 Debian Web 服务器 但我越来越恼火 一旦我停用 mod php 我就会收到以下错误 2014 年 5 月 22 日星期四 12 16 10 错误 客户端 xxx
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • zend框架验证模型中的数据而不是表单中的数据

    使用 Zend Framework 2 在我的应用程序中 要编辑数据库中的数据 可以编译 html 表单或发送 http post 请求 我的服务器作为 Web 服务实现 在第二种情况下 不会呈现表单 问题 如果当服务器收到不是从表单发送而
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • Sublime Text 编辑器中的 PHP 语法检查

    在Gedit中 我可以在当前文档上添加 php l 外部工具 如果我安装了PHP命令行 它将对文档进行语法检查 有没有办法用 Sublime Text 编辑器来做到这一点 注意 我有一台 Mac 并且安装了 PHP CLI 我想我必须将代码
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • 洗牌阶段实际上做了什么?

    洗牌阶段实际上做了什么 可能性 A 由于 shuffle 是将映射器 o p 带到减速器 o p 的过程 因此它只是根据分区器中编写的代码将特定键从映射器带到特定的减速器 例如 映射器 1 的 o p 是 a 1 b 1 映射器 2 的 o
  • 如何在课堂上使用 cv::setMouseCallback?

    我想在我的设置类中使用 cv setMouseCallback 来选择图片的区域 这是我的代码 void Settings on buttonXML clicked cv VideoCapture webcam webcam open IN
  • 如何从任何组件外部调用 React 的 setState 函数(如实用程序函数)?

    我有一个应用程序 我想将读取 写入操作移至实用程序文件 即远离组件 我正在尝试这样做 组件 js import saveData from utils fileSave js class App extends Component save
  • Android 中的垂直标签栏

    有谁知道是否可以在 android 中创建垂直标签栏 或者是否有一个库可以提供垂直标签栏的功能 Thanks 您可以使用以下代码来实现此目的 getTabWidget setOrientation LinearLayout VERTICAL
  • 将函数附加到左键单击 项目

    在我的火狐插件中我有一个
  • 给定以下语言构造语法 {a^n b^m | n,m = 0,1,2,...,n <= 2m} [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我刚刚参加了期中考试 但无法回答这个问题 有人可以举几
  • 更改 Material-UI TextField 上的边框颜色

    这应该很简单 但由于某种原因我无法弄清楚如何更改 TextField 上的边框颜色
  • 列表 [字符串] 的 QueryStringBinder

    使用 Play 2 0 1 我定义了以下路线 GET demo list controllers Demos listDemos page Int 0 orderBy Int 1 nameFilter String versionFilte
  • 在 Swift 中使用 iOS AWS SDK 检查 Amazon S3 文件的元数据

    我正在使用 AWS iOS SDK v2 和 Swift 1 2 我正在存储我的应用程序app jsonS3 上的文件并希望在启动时检查它以查看自上次运行以来它是否已更新 根据研究 只需对对象执行 HEAD 请求就应该返回 Last Mod
  • 如何使用 Python 将 .ICO 转换为 .PNG?

    我正在尝试在 Python 中将一批 ICO 图像转换为 PNG 图像 我有很多图像需要检查 所以我想找到一个程序化的解决方案 我尝试过使用 PIL 但我似乎无法正确显示图像和透明度 我更喜欢使用 Python 但如果无法完成 其他语言或库
  • 为 C 程序创建 MATLAB MEX 文件

    我是一位经验丰富的 MATLAB 用户 但对 C 和 MEX 文件完全陌生 我有一个用 C 编写的复杂程序 需要从 MATLAB 中调用 该程序由一个文件夹中的几十个文件组成 其中包括一个名为 main c 的文件 它处理来自命令行的输入
  • jqGrid 中的 idPrefix 用法

    给定一个填充有本地数据并使用 idPrefix custTable 选项创建的 jqGrid 所有生成的行都会在 html id 中获得前缀 即 custTableRow 1 custTableRow 2 等 是否需要将这个 idPrefi
  • API VBA 的 eBay 数字签名可以,但 Python 签名验证无法满足请求

    我可以使用以下 VBA 代码成功地从 eBay 的 REST API 获得带有数字签名的响应 我没有包含所有代码 因为代码相当多 但下面是重要部分 Set http New MSXML2 XMLHTTP60 created time Dat
  • Cypher 相对于 REST 的“注入”担忧

    我想知道当我通过 REST 查询时是否存在查询注入的问题 参数化查询肯定会让事情变得更加清晰 但我也能够通过字符串连接进行查询来操作属性和标签 我发现后一种方法更灵活 因为有时我无法按照参数范式查询我想要的方式 我可以在 CREATE 或
  • AZURE AD B2C 浏览器页面在带有 MSAL.net web 的嵌入式 Web 视图中错误呈现(新版本用户流程(推荐))

    正如微软iffical所说 UWP不能将系统Web与aad b2c一起使用 必须使用嵌入式Webview But when I use MSAL net it offen mis render the page as the image b
  • 使用 Android Binder 共享文件描述符

    如何在 C 中使用 Android Binder IPC 跨进程共享文件描述符 您也可以发布示例吗 在客户端进程中 我们执行以下操作来执行活页夹事务 remote gt transact MYTRANSACTION data reply I
  • Scrapy + selenium 对每个 url 请求两次

    import scrapy from selenium import webdriver class ProductSpider scrapy Spider name product spider allowed domains ebay
  • 按周汇总,即使是空行

    我想按周汇总 sales quantity 的总和 并显示周数 即使没有销售 我已经设置了一个包含 1 54 的周表 以使用外部联接强制所有周数都通过 但它不起作用 它错过了没有销售的几周 我的查询是 SELECT Weeks WeekNu
  • TypeScript:深度部分?

    有没有一种方法可以在 TypeScript 中指定部分类型 同时也使所有子对象也成为部分类型 例如 interface Foobar foo number bar baz boolean qux string const foobar Pa
  • 正确的 PHP mcrypt 加密方法?

    好的 我尝试使用 PHP 创建自己的加密 解密方法mcrypt 当我不久前发布它们时 有些人称它们为 垃圾 他们提到了 初始化向量 之类的事情 基本上 我怎样才能使这些加密方法更好 function encrypt key data enc