2013-07-31 120 views
0

我想這將是非常簡單的,但我有一個問題,讓我的AES加密函數返回一個十六進制字符串。當我將它轉換爲Base64時,我可以使它工作,但我無法使用十六進制值獲取字符串。這是我的代碼。任何幫助,將不勝感激。AES加密輸出十六進制vb.net

Dim AES_ENCRYPTION As New System.Security.Cryptography.RijndaelManaged 
Dim CODE_AES As New System.Security.Cryptography.MD5CryptoServiceProvider 
Dim encrypted As String = "" 
Try 
    Dim hash(31) As Byte 
    Dim temp As Byte() = CODE_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass)) 
    Array.Copy(temp, 0, hash, 0, 16) 
    Array.Copy(temp, 0, hash, 15, 16) 
    AES_ENCRYPTION.Key = hash 
    AES_ENCRYPTION.Mode = CipherMode.ECB 
    Dim AES_ENCRYPTOR As System.Security.Cryptography.ICryptoTransform = AES_ENCRYPTION.CreateEncryptor 
    Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input) 
    encrypted = (Conversion.Hex(AES_ENCRYPTOR.TransformFinalBlock(Buffer, 0, Buffer.Length))) 
Catch ex As Exception 
End Try 

Return encrypted 
+0

從[你如何將字節數組轉換爲十六進制字符串,反之亦然?](http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-十六進制字符串,反之亦然)並將其轉換爲vb.net – CodesInChaos

+6

我還想指出,您的加密方法很弱(ECB,沒有MAC,沒有IV)以及您對待密鑰無意義的方式。您不使用適當的鹽漬和慢密碼哈希,如PBKDF2。我不知道你奇怪的複製應該達到什麼目的。您無聲地破壞ASCII範圍之外的Unicode數據。 – CodesInChaos

+0

這就是爲什麼我來到StackOverFlow。這不是項目或生產代碼。這是玩的東西。感謝您的鏈接。 –

回答

0

我試過你的例子了,而且我什麼都沒有。

因此,我試過而不是有encrypted = (Conversion.Hex(AES_ENCRYPTOR.TransformFinalBlock(Buffer, 0, Buffer.Length))),我已經使用一個循環來轉換每個字節到它的十六進制等值,並將它連接到encrypted

Dim encrypted_byte() As Byte = AES_ENCRYPTOR.TransformFinalBlock(Buffer, 0, Buffer.Length) 
For i As Integer = 0 To encrypted_byte.Length - 1 
    encrypted = encrypted & Hex(encrypted_byte(i)).ToUpper 
Next 

我不知道你如何在Java格式的十六進制字符串,但是這應該是至少一個開始。