问题标签 [mcrypt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1424 浏览

php - PHP AES 加密...不知道我在做什么

我对加密知之甚少,但我能够让 AES 在 PHP 中工作......有点。以下是我正在使用的几个函数:

这些是根据 mcrypt 的 PHP 文档页面上的评论稍微修改的。(我从 dev_urandom 更改为 rand,因为我在一个 windows 盒子上,其中 dev_urandom 不可用。)

无论如何,我在这个函数中使用的键是这样定义的:

我这样称呼我的函数:

echo bin2hex(aes_encrypt("wootwootwootwootwootwootwoo", PSK));

现在,生成的十六进制字符串的前 16 个字节(32 位)就可以了。接下来的 16 个字节与预期不匹配。

看,我将此数据发布到外部 Web 服务,然后对其进行解密。我(不幸的是)不能在不分发我的加密密钥和数据的情况下给出我拥有的一个测试用例。对此我感到非常抱歉,但我希望熟悉 mcrypt 的人可以看看这个并告诉我我做错了什么。

再次,对于缺乏可靠的测试用例感到抱歉,但我非常感谢您提供的任何帮助!

编辑:似乎我发布到的提供商正在使用空 IV。按照 Rook 的建议,我已经切换到 CBC 模式,并删除了与密钥相关的不必要代码。这是我的新功能:

0 投票
2 回答
655 浏览

php - PHP编译错误试图获得mcrypt,Mac OSx 10.6

我正在努力在新的 Mac Mini 上设置 LAMP 堆栈以用作 Web 服务器。我正在使用捆绑的 PHP 版本 5.3.3 和 Apache 2.2.15。

我已经让 phpMyAdmin 工作并连接到我的 mysql 安装,但我得到一个“无法加载 mcrypt 扩展。我做了这个教程 - http://michaelgracie.com/2009/09/23/plugging-mcrypt-into-php-on- mac-os-x-snow-leopard-10.6.1/ - 安装 mcrypt 并且 phpinfo() 显示 mcrypt 已按照最后的屏幕截图安装。

但是我仍然收到未加载 mcrypt 扩展的警告。我怎样才能摆脱这个。该服务器最终将用于生产,我希望它是安全的。

0 投票
2 回答
681 浏览

php - MembershipProvider.GetPassword 算法

我们正在将一个 ASP 站点(使用 DotNetNuke)转换为一个新的 PHP 站点。我们现在唯一拥有的是现有数据库的完整导出。其中一个表称为“aspnet_Membership”,包含以下字段:

  • 密码(看起来像 base64)
  • PasswordFormat(始终为 2)
  • PasswordSalt(看起来像 base64)
  • 密码问题(始终为空)
  • PasswordAnswer(始终为空)

我们想解码这些密码并对它们进行哈希处理以适应我们自己的框架。根据我从.NET 文档中了解到的这些密码可以被解密。是否有可用的算法可以做到这一点,还是比这更复杂?如果我们在当前服务器上创建一个 ASP 脚本可以吗?

提前致谢

0 投票
1 回答
20978 浏览

c# - 使用 Rijndael 的跨平台(php 到 C# .NET)加密/解密

我目前在解密由 php mcrypt 加密的消息时遇到了一些问题。php代码如下:

然后将加密的消息发送到 ASP.NET 平台 (C#)。但是,我在保留解密顺序(base64 解码到 urldecode)时遇到问题。我在 ASP.NET 中的代码如下(iv 和 key 与 php 中的相同):

我遇到的问题是,从 php 收到加密消息后,我将其转换为 byte[],然后转换回 UTF8 编码的字符串,这样我就可以对其进行 urldecode。然后我将结果输入到函数中,在该函数中我将字符串转换回 byte[] 并通过解密过程运行它。但是,我无法得到想要的结果......有什么想法吗?

提前致谢。

0 投票
2 回答
2168 浏览

php - mcrypt 可以执行 crypt() 支持的相同算法吗?

我有一个在 PHP 5.3 上运行的应用程序,它存储使用 PHPcrypt()函数散列的密码。但是,默认情况下使用的散列类型 (SHA 512) 在我现在使用的运行 PHP 5.2 的服务器之一上不可用。我已经看到使用 mcrypt 可以获得更多的灵活性,但使用起来也更复杂。

是否可以使用 PHP 的 mcrypt 函数获得与 crypt 相同的结果(使用 SHA512 salt)?

因此,如果我使用 SHA512 盐输入“测试”,则使用 crypt() 和使用 mcrypt() 时加密的数据应该相同。

如果不可能,任何人都可以给我其他建议吗?不幸的是,升级到 PHP 5.3 不是一种选择(它是一个云服务器,我没有时间为此编写脚本)。

0 投票
3 回答
4439 浏览

php - URL 中的加密数据

我正在开发一个 PHP 应用程序来管理公司的订单。要查看订单,URL 当前是/orders/view/3502

我不希望订单 ID 号出现在 URL 中,所以我使用 CodeIgniter 的加密库对 URL 中的 ID 进行加密。URL(加密后)看起来像/orders/view/AaffGdQQ.

我遇到的问题是有时加密的 ID 包含正斜杠或加号,它们在 URL 中无法正常工作。CodeIgniter 基于斜杠读取 URL,因此,如果加密的 ID 有斜杠,它会将其读取为 2 个变量,而不是一个。此外,加号被解释为 URL 中的空格。

所以,我的问题是,如何加密 ID 并确保字符串不包含加号或斜杠?

编辑:我想看看加密的 ID 是否包含斜线或加号,如果包含,请再次加密。出于某种原因,每次对 ID 进行加密时,它都会有所不同,所以这会起作用。

0 投票
2 回答
3426 浏览

php - PHP 加密与 iOS 和 .NET 的区别

在 iOS 和 PHP 之间进行加密通信时遇到问题。我有一个加密字符串并将其发送到解密它的 PHP 服务器的应用程序。那部分工作得很好。现在 PHP 服务器需要将加密响应发送回应用程序,这似乎导致了更多的白发。

问题是,当我在 PHP 中加密一个字符串时,它看起来与在 iOS 甚至 .NET 中加密的相同字符串不同 - 显然所有地方都使用相同的算法、密钥和 IV。

我在 CBC 模式下使用 Rijndael 128,IV 由空字节组成(到目前为止)。

PHP 加密看起来是这样的:

iOS 加密附加在此文件中:

StringEncryption.m:http ://pastie.org/1365766

我希望有人可以帮助我发现我遗漏了什么或有一些不同的值参数。我已经看了几个小时,找不到其他可以尝试的东西。

0 投票
2 回答
610 浏览

python - 数据损坏:错误在哪里‽

上次编辑:我已经弄清楚问题出在哪里(请参阅下面我自己的答案),但我无法将问题标记为已回答,看起来。如果有人可以回答我在下面的答案中提出的问题,即这是 Cython 中的错误还是此 Cython 的预期行为,我会将该答案标记为已接受,因为这将是从中获得的最有用的教训,恕我直言.


首先,我必须首先说我已经尝试了三天来解决这个问题,而我只是把头撞在墙上。尽我所能从文档中得知,我做事正确。显然,我不能正确地做事,因为如果我是,我不会有问题(对吧?)。

无论如何,我正在将 mcrypt 绑定到 Python。它应该适用于 Python 2 和 Python 3(尽管它未经 Python 2 测试)。它可以在我的网站上找到,链接是因为它太大而无法包含在帖子中,并且鉴于我不知道做错了什么,我什至无法隔离可能是问题代码的内容。显示问题的脚本也在我的网站上。该脚本只提供了 100 个块,除了字母“a”(加密算法/加密模式使用的任何块大小),当然应该得到一个“a”块作为往返的结果。但它不会(总是)。这是一次运行的输出:

奇怪的是,对于给定的(算法,模式)对,它是完全相同的。我可以更改算法,它会导致不同的往返,但是当我不更改算法时,每次运行总是相同的。我完全被难住了。此外,正如您在上面的输出中看到的那样,总是有两个块连续损坏:块 5 和 6、13 和 14 等。所以,有一个模式,但无论出于何种原因,我都无法弄清楚该模式准确地指向什么。

我意识到我可能在这里问了很多问题:我无法隔离一小段代码,并且可能需要熟悉 mcrypt 和 Python。唉,经过三天的努力,我需要稍微远离这个问题,所以我在这里发布这个问题,希望也许当我正在解决这个问题时,或者(a)某人将看到我在哪里引入了错误,(b) 当我稍后回到问题时,我将能够看到我的错误,或者 (c) 某人或我自己可以找到可能不是我的代码中的错误的问题,但是绑定过程或库本身中的错误。

我没有做的一件事是尝试使用另一个版本的 mcrypt 库。我正在使用 Cython 0.13、Python 3.1 和 mcrypt 2.5.8 进行工作,所有这些都由 Ubuntu 在 Ubuntu 10.10 中分发(除了 Cython,我从 PyPi 获得的)。但是我使用运行良好的 PHP 应用程序管理系统,并且在 Ubuntu 10.10 上使用 mcrypt 没有数据损坏,所以我没有理由相信它是 mcrypt 的构建,所以只是留下......好吧,我在某个地方出了点问题, 我认为。

无论如何,我非常感谢任何可以提供帮助的人。我开始觉得自己快疯了,因为我已经连续几天一直在研究这个问题,我觉得解决方案可能就在我面前,但我看不到它。

编辑:有人指出我应该使用 memcpy 而不是 strncpy。我这样做了,但是现在,测试脚本显示每个块都不正确。让我比以前更加困惑……这是pastebin上的新输出。

编辑 2:我已经回到计算机并再次查看它,我只是在各处添加打印语句以查找可能出错的地方。raw_encrypt.step(input) 函数中的以下代码:

第一个打印语句显示了预期的内容,即传入的明文。但是,第二个显示了完全不同的内容,它应该是相同的。似乎 Cython 发生了一些我不完全理解的事情。

0 投票
0 回答
486 浏览

php - php_mcrypt.dll 阻止 PHP 加载

我正在使用 WEMP (Engine-x / NGINX),似乎无法为 phpmyadmin 加载 mcrypt 扩展。

一个多小时以来,我一直在努力解决这个问题。我尝试将 libmcrypt.dll 放在 PHP 根文件夹和 windows/system32 中,但没有成功。

没有具体的错误。当我尝试加载 PHP exe 时,如果我在 php.ini 文件中有“extension=php_mcrypt.dll”,则 exe 会立即崩溃

任何帮助表示赞赏。提前致谢

0 投票
3 回答
3439 浏览

java - 如何在 PHP 中解密 Jasypt 加密的字符串?

这可能是一个不可能的问题,但我正在将遗留系统从 Java 迁移到 PHP,并且我需要能够解密在 PHP 中使用 Jasypt 加密的字符串。

根据文档,Jasypt 使用以下算法:

  • 将随机盐(我认为这与密码的初始化向量相同)附加到要加密的数据
  • 重复加密 1000 次
  • 将未加密的 salt/IV 添加到加密的字符串中
  • Base64 编码整个字符串

遗留应用程序使用PBEWithMD5AndDESJasypt 算法。我完全知道 MD5 不是为解密而设计的,这不是我想要做的。

我只是想对字符串进行 DES 解密,这样我剩下的就是 MD5 哈希。除了 PHP 中的二进制垃圾,我似乎什么也得不到。我错过了什么?