【问题标题】:Convert encryption algorithm mcrypt to openssl将加密算法 mcrypt 转换为 openssl
【发布时间】:2018-11-10 02:00:34
【问题描述】:

由于 php 从 7.2 起停止了对 Mcrypt 的支持。我不太了解将 Mcrypt 转换为 Openssl。 我想知道是否有人可以为此提供 OpenSSL 等效项?作为记录,我不希望支持 Mcrypt,所以我必须通过 openSSL 解密我的 mcrypt 加密字符串(密码)。

通过 mcrypt 编码->

static function encode($value= NULL, $key= NULL){
    if(!$value){
        return false;
    }
    $text = $value;
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
    return trim(self::safe_b64encode($crypttext));
}
private function safe_b64encode($string= NULL) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
}

【问题讨论】:

  • 请发布您尝试过的解密功能。​​

标签: php openssl mcrypt


【解决方案1】:

更新

不幸的是,您似乎无法做自己想做的事。如果您使用 MCRYPT_RIJNDAEL_128 模式和 256 字节密钥,可能会有希望。

AES-256 和 MCRYPT_RIJNDAEL_256 加密不是一回事,尽管 AES 基本上是 Rijndael。这一切都与块大小有关。你想做的就是不兼容。

你的选择是这样的:

  • 使用仍具有 MCRYPT 库的 PHP 版本,将密码解密为文件,然后使用新的加密方法对其进行加密。
  • 一个 PECL 选项看起来可用,它允许您使用最新版本的 PHP 安装 MCRYPT 的伪版本。

仅用于加密和解密您的密码 OpenSSL 应该没问题,但是 OpenSSL 有限制,尤其是当您要加密大量数据时。它要求您在加密之前编写额外的代码将数据分解成更小的块,然后在解密后将其重新组合在一起。

我强烈建议您跳过 OpenSSL 并学习最新 PHP 版本现在支持的 LibSodium 库。

http://php.net/manual/en/book.sodium.php

这是一个很好的页面,可以帮助您入门。

https://paragonie.com/blog/2015/05/using-encryption-and-authentication-correctly

更多 Libsodium 资源。

https://github.com/paragonie/pecl-libsodium-doc/blob/v1/chapters/01-quick-start.md

祝你好运~

【讨论】:

  • 嗯,它不是登录过程。我不能要求用户更改所有字符串。我已经用 mcrypt 加密它们,我不能用 mcrypt 解密它们,因为我正在提供支持对于我现在必须使用 OpenSSL 的 php 7.2
  • 澄清一下,它们是经过加密而不是散列的字符串密码。如果它们是散列,则无法解密。您的代码是否高于您用于加密密码的代码?
  • 是的,上面是我用来加密的 mcrypt 算法代码。我可以解密吗?
  • 您是在加密密码文本(即“myPassword”)还是密码的哈希值?
  • 我将文本加密为“myPassword”而不是任何哈希值。
【解决方案2】:

在加密数据方面您有很多选择,因此您应该自己实施它。我向你推荐库diffuse/php-encryption,详细教程见this link

【讨论】:

  • 首先,我必须解密 mcrypt 加密数据,我现在必须使用 OpenSSL。即使我使用库diffuse/php-encryption,我是否能够解密我的加密数据?
  • 很遗憾,没有,涉及到两种不同的加密算法,参见。 stackoverflow.com/questions/42696657/…
猜你喜欢
  • 2020-07-17
  • 2018-12-12
  • 2019-07-23
  • 2017-10-15
  • 2020-05-16
  • 2020-04-12
  • 1970-01-01
  • 2019-03-11
  • 2014-02-24
相关资源
最近更新 更多