【发布时间】:2021-04-21 21:59:45
【问题描述】:
我想解密我拥有的已经加密的文本,我通过 MacOS 终端中的命令来管理它。
printf "encrypted text" | openssl enc -d -base64 -A -aes-256-cbc -k "abcde" -nosalt
在 MacOS 终端中它运行良好,我得到了解密的消息,但我在 php 中尝试过,但失败了。
<?php
$method = 'aes-256-cbc';
$password = substr(hash('sha256', 'abcde', true), 0, 32);
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
$decoded = openssl_decrypt(base64_decode($token), 'AES-256-CBC', $password, 0, $iv);
return $decoded;
?>
我不知道终端如何处理 -nosalt 键以获取 iv 并通过,我尝试使用空 iv 并失败。这个的 php 等效代码是什么?
【问题讨论】:
-
呃不知道,因为当您未能为
openssl enc指定 IV 时,它是从密钥派生的,这是一个坏主意,我找不到相关文档。也没有指定密钥派生函数默认为不安全的东西,我也找不到文档,最后-nosalt选项is已记录,但This option SHOULD NOT be used except for test purposes or compatibility with ancient versions of OpenSSL.。所以呃......不要这样做。
标签: php macos encryption openssl