gpt4 book ai didi

php - 在 PHP 中解密 OpenEdge 加密的字符串 (AES-128)

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:53 25 4
gpt4 key购买 nike

这是我在 OpenEdge 10.1B 中使用的函数,用于使用 AES-128 OFB 加密字符串:

 DEFINE VAR cRes AS CHAR INITIAL ? NO-UNDO.
DEFINE VAR rKey AS RAW NO-UNDO.
DEFINE VAR rEnc AS RAW NO-UNDO

rKey = GENERATE-PBE-KEY(cEncKey).

eEnc = ENCRYPT(cData, rKey, ?, "AES_OFB_128").
cRes = BASE64-ENCODE(rEnc) NO-ERROR.

IF ERROR-STATUS::ERROR THEN cRes = ?.

return cRes.

这个函数加密效果很好。

当我想用下面的 PHP 解密时,它失败了,例如它给了我与原始字符串不同的结果。

// decrypted: original string is supposed to have 33 characters
$encrypted = "YnRvNjIG1kj1QtUM9ZYuVYS3D4LBYCEsprjg2QCaD/eM";
$key = "27Zkp6Wq";

$method = 'aes-128-ofb';

# do decryption
echo "<pre>".openssl_decrypt(base64_decode($encrypted), $method, $key, false)."</pre>";

我知道这可能与 GENERATE-PBE-KEY 函数有关,但我看不出如何在 PHP 中生成 PCKS#5 key 。

有人可以帮帮我吗?

最佳答案

评论太长了。需要注意的几点:

  1. openssl_decrypt 的第四个参数应该是 true 或者第一个参数应该保留 base64 编码。除非它是双重 base64 编码:)

  2. key 是 base64 编码的还是原始 key ?

  3. 从 OpenEdge 来看,尚不完全清楚是 PBES1 (pbkdf1) 还是 PBES2 (pbkdf2) 应用于 key ,但默认设置使用 sha1 作为哈希算法,没有盐和 1000 作为迭代计数。您可以在线找到示例 PHP 实现。

在摆弄你的例子后我无法让它工作,但上面的内容应该会引导你朝着正确的方向前进;顺便说一句,当我尝试在 PHP 中执行编码步骤时,它产生了一个更短的加密字符串……我不确定该怎么想:)

关于php - 在 PHP 中解密 OpenEdge 加密的字符串 (AES-128),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com