【发布时间】:2017-12-12 08:16:39
【问题描述】:
这个问题是my previous question 的第二部分。
我遇到过其他类似问题的线程,但由于 PHP 的最近变化(即 mcrypt 删除),我正在寻求一些关于在 2017/18 年我最好如何使用 OpenSSL 来解决这个问题。
我在 PHP 脚本中设计了以下函数。它需要一个纯文本字符串并对其进行加密。
<?php
function encrypt( $myString) {
$data = $myString;
$key = 'B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF';
$iv = '61736466673534336173646667353433';
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, 0, hex2bin($iv));
return $encrypted;
}
?>
返回:6Q7DM7VGEeJdnGf2h9k1Kg==
我的问题很简单:将上述结果转换回纯文本的终端解密等效项是什么?
到目前为止,我能够在 AppleScript 中使用以下终端命令(用于更快的变量操作),但 do shell script 内容是终端代码:
set encKey to "B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF"
set encIV to "61736466673534336173646667353433"
set stringToEnc to "my plain text string"
set encrypted to (do shell script "echo '" & stringToEnc & "' | openssl enc -aes-256-cbc -a -K " & encKey & " -iv " & encIV)
set decrypted to (do shell script "echo '" & encrypted & "' | openssl enc -aes-256-cbc -a -d -K " & encKey & " -iv " & encIV)
然而,虽然它按原样工作,但将encrypted(在上面的脚本中)设置为 PHP 函数的输出,它会引发错误:
错误的解密 140735624655752:错误:06065064:数字信封例程:EVP_DecryptFinal_ex:错误解密:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22/libressl/crypto/evp/evp_enc.c:529:
在 SO 上研究了this、that 和类似问题后,我很困惑为什么错误不断发生。
我相信这是因为key和iv的编码(注意我在PHP中使用了hex2bin()),如果不使用会产生不同的结果。
我的终端命令中缺少什么?如果有人可以帮助我计算出等效的解密方法,我将非常感谢您的帮助。
【问题讨论】:
标签: php encryption terminal cryptography