【问题标题】:openssl_encrypt & AES256openssl_encrypt & AES256
【发布时间】:2018-08-19 22:08:38
【问题描述】:

也许有人知道如何在 PHP 上做到这一点

回显“测试”| openssl enc -e -aes-256-cbc -k 123456 -a -md md5

我会试试的

$iv = openssl_random_pseudo_bytes(16);
$data = base64_encode(openssl_encrypt('TEST', 'aes-256-cbc', $password, OPENSSL_RAW_DATA, $iv));

但没有成功..

【问题讨论】:

  • 仅仅基于变量名$password...我当然希望你不要加密用户登录密码,而不是像你应该的那样对它们进行散列。
  • 是的,您需要对密码进行哈希处理,而不是对其进行加密。
  • 伙计们:OP 选择了错误的变量名(尽管我确实希望他没有尝试加密密码)。 openssl_encrypt 的第三个参数是加密密钥。
  • 你在开玩笑吗?)))我太愚蠢了,不能设置变量 $password ?)——结果不同,来自控制台的加密,就像 php...

标签: php aes php-openssl


【解决方案1】:

有趣的是,就像 https://linux.die.net/man/1/enc 的版本一样,我的本地 openssl 安装手册页列出了“-md”(不带参数)作为 openssl enc 的选项 - 但似乎没有解释它的用途。 openssl wiki 表示它用于密钥派生。

再挖一点,我找到了this on the SO cryptography site

但是在尝试编写实现之前,由于openssl 的实现有点深奥,它会引出一个问题,即在您的实现中是否需要专门支持这一点?如果您只需要一种加密/解密网站外部数据的方法,您可以编写一个命令行 PHP 脚本。

快速阅读链接的文档,建议......

  $data = base64_encode(openssl_encrypt('TEST', 'aes-256-cbc', md5($password, true), OPENSSL_RAW_DATA, $iv));

但我希望 openssl 对派生函数中的密钥执行其他操作,以将 16 个字节填充到所需的 128 位(为什么要为 256 位算法强制使用 128 位密钥?)

【讨论】:

  • Thx for normal answer ;) 关于强制算法我不知道,我在 php.net 上找到示例并尝试做类似示例...我在粘贴时尝试代码,但这个示例也不起作用; (((和结果不同...
  • 关于 -md 我也尝试找到正常的答案,但找不到..那个论点是做什么的..
  • openssl 的工作变量返回像那个加密字符串 U2FsdGVkX1+EHk4P8i2vv68U0k6ff0nn3MNxCWQnKOga3FQJKZjV2Nv3CKm36eUH 你的变量返回像那个 SSUsMVwk7XEJPVEmnHHTBA==
  • 当然可以。如果您不了解长度的差异,以及按键拉伸的明显解决方案,也许您在这里有点超出您的深度?
  • 也许...我今天会尝试更多变体,但仍然没有...我认为最好使用 openssl_digest 但我仍然不明白如何...如果加密所有消息,文本似乎很好,但不是有效...如果仅加密密钥,则再次刺痛。
猜你喜欢
  • 2018-02-05
  • 2018-08-29
  • 2015-05-24
  • 2019-06-23
  • 2014-08-01
  • 2015-07-12
  • 2015-05-19
  • 2021-12-24
  • 2018-07-25
相关资源
最近更新 更多