簡體   English   中英

在PHP中使用openssl使用AES-256-CBC加密數據

[英]Encrypt data with aes-256-cbc with openssl in php

我正在嘗試使用php語言中的openssl aes-256-cbc加密十六進制數據。 我的數據長度是32個字節,密鑰長度是32個字節, iv是16個字節0

我使用openssl_encrypt函數對十六進制數據進行加密,但是函數輸出的時間太長了。 我不知道我的錯在哪里。

這是下面的代碼:

$plainData = "00A40800063D103D202F2400";
$encryptionMethod = "aes-256-cbc";
$encryptionKey = "395f426c0e5bd914375837483b791d80854dd9a19dd86fd189e94ccade60c5b8";
$iv = "0000000000000000";

$encryptedData = openssl_encrypt($plainData, $encryptionMethod, $encryptionKey, $iv);

Output: 6e6469763877536e534a4f677168716f67692f684a4166315767534951764f645a575044554f6f4162763333332f6c516d6a397635723566713259444f6e79586137586e366e4f476e7a46765a4b45302b4b4855676961786757556361373932766869584453385749726f3d

預期的輸出長度是32個字節,但高於輸出的是216個字符串。

代碼塊上方的問題在哪里?

長度由於所謂的padding而大小不同。 默認情況下使用的填充是PKCS#7兼容的填充。 總是添加該填充; 這樣,可以將填充與可能的(二進制)純文本區分開。

如果您已經知道密文始終是塊大小的倍數,則可以在加密和解密期間將OPENSSL_NO_PADDING用作選項; 然后,您將負責確保加密期間明文是塊大小的倍數。


可以使用全零IV的AES-CBC,但是請記住,這會泄漏有關純文本的信息:可以識別出在純文本消息開始處重復的純文本塊。 可靠地使用全零IV的唯一方法是確保第一個明文塊永遠不會相同在每次調用時更改密鑰。

還要注意,CBC模式是可延展的-如果攻擊者可以更改密文或明文,則您所描述的簡單加密模式勢必會遇到安全問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM