亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

加密:使用 vb.net 得到的結果與 php 不同

加密:使用 vb.net 得到的結果與 php 不同

PHP
繁花如伊 2023-11-03 21:23:55
我有這個 php 代碼$plain_text = "abc";$salt = "123";echo $encrypted_text = openssl_encrypt($plain_text, "AES-128-ECB", $salt);// result: kR/1uaFarptS5+n951MVsQ==我在vb.net上嘗試了幾種方法(類和函數),但是用這種語言加密的結果每次都與上面使用php的不一樣。例如這個:Public Function AES_Encrypt (ByVal input As String, ByVal pass As String) As String        Dim AES As New System.Security.Cryptography.RijndaelManaged        Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider        Dim encrypted As String = ""        Try            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            AES.Mode = Security.Cryptography.CipherMode.ECB            Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor            Dim Buffer As Byte () = System.Text.ASCIIEncoding.ASCII.GetBytes (input)            encrypted = Convert.ToBase64String (DESEncrypter.TransformFinalBlock (Buffer, 0, Buffer.Length))            Return encrypted        Catch ex As Exception        End Try    End Function sEnc = AES_Encrypt("abc", "123") Console.WriteLine(sEnc)'result: Z3hCHcS0b2zJ7fEod3jcrw==請問,使用 vb.net(無 C#),如何使用算法“AES-128-ECB”獲得文本“abc”和鹽“123”的加密結果“kR/1uaFarptS5+n951MVsQ==”?
查看完整描述

1 回答

?
慕雪6442864

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。


查看完整回答
反對 回復 2023-11-03
  • 1 回答
  • 0 關注
  • 218 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號