[英]AES-128 success of decryption in PHP depends on the length of encrypted string?? (sent from iOS xcode)
[英]Decrypt an OpenEdge-encrypted String (AES-128) in PHP
這是我在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密鑰。
有人可以幫幫我嗎?
這個評論太長了。 有幾點需要注意:
openssl_decrypt
的第四個參數應為true
或第一個參數應保留為base64編碼。 除非它是雙base64編碼:)
密鑰base64是編碼還是原始密鑰?
從OpenEdge來看, PBES1 (pbkdf1)
或PBES2 (pbkdf2)
是否應用於密鑰並不完全清楚,但默認設置使用sha1
作為哈希算法,沒有鹽, 1000
作為迭代計數。 您可以在線找到示例PHP實現。
擺弄你的榜樣我無法讓它發揮作用,但上述應該引導你朝着正確的方向前進; 順便說一句,當我嘗試在PHP中執行編碼步驟時,它導致了一個更短的加密字符串......我不知道該怎么想:)
你有安全 - 政策:PBE-HASH-ALGORITHM和SECURITY-POLICY:PBE-KEY-ROUNDS定義在哪里?:
http://documentation.progress.com/output/OpenEdge102b/pdfs/dvpin/dvpin.pdf#page=173
好的,所以我終於放棄了。 問題顯然是OpenEdge中的哈希函數,我無法在PHP中重現。 解決方案是從哈希函數中獲取哈希鍵並將其在HEX中通過第二個通道移動到PHP,並在那里使用它來解密。
它並不是非常安全,它不優雅,但它可以工作,我們的安全問題不是代碼方面,而是數據庫存儲方面。 您的要求可能不同,因此只有在您確定可用時才使用此方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.