1 回答

TA貢獻1812條經驗 獲得超5個贊
由于AES-128-ECBPHP代碼中的規范,ECB模式下使用AES-128,即密鑰長度為16字節。但由于僅應用了 3 字節大鍵 ( 123),PHP 將值填充到必要的 16 字節大小0x00。請注意,如果密鑰太長,則會被截斷。
在 VB 代碼中使用 32 字節密鑰。由于在 .NET 中,密鑰大小決定了 AES 變體,因此應用 AES-256。而且,傳遞的密鑰并不是直接使用的,而是根據傳遞的值與摘要MD5推導出實際的密鑰。
為了讓VB代碼返回PHP代碼的結果,PHP代碼的邏輯必須在VB代碼中實現:
...
'Dim hash(31) As Byte
'Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
'Array.Copy(temp, 0, hash, 0, 16)
'Array.Copy(temp, 0, hash, 15, 16)
'AES.Key = hash
Dim keyPadded(15) As Byte
Dim key = System.Text.ASCIIEncoding.ASCII.GetBytes(pass)
Array.Copy(key, 0, keyPadded, 0, Math.Min(16, key.Length))
AES.Key = keyPadded
...
幾點說明:
在 PHP 代碼中,該鍵稱為
$salt
.?這是誤導,因為鹽有不同的含義。ECB模式通常是不安全的。
AES?-128 使用 16 字節密鑰。
123
不是一個強鍵(但也許這只是一個虛擬值)。如果
123
不代表密鑰,而是派生密鑰的密碼,那么通常不應使用 MD5,而應使用專門設計的算法,例如PBKDF2或Argon2。
- 1 回答
- 0 關注
- 218 瀏覽
添加回答
舉報