-
Feb 20th, 2018, 07:59 PM
#1
Thread Starter
New Member
A VB.NET equivalent of a PHP hash function
I am having trouble converting this PHP code to VB.
PHP Code:
$result = hash('sha256', $postdata, true)
this function can be consulted at this address http://php.net/manual/en/function.hash.php
I have this VB code:
Code:
Public Function SHA256(ByVal Content As String, ByVal raw_output As Boolean) As String
Dim MoLeCuL3 As New Security.Cryptography.SHA256CryptoServiceProvider
Dim ByteString() As Byte = System.Text.Encoding.ASCII.GetBytes(Content)
ByteString = MoLeCuL3.ComputeHash(ByteString)
Dim FinalString As String = Nothing
For Each bt As Byte In ByteString
If raw_output Then
'..... ????? ..........
Else
FinalString &= bt.ToString("x2")
End If
Next
Return FinalString
End Function
but I can not code the result in "raw binary data", as does the original PHP function with the third parameter set to TRUE.
Can anyone help me with this? Very much appreciated. Thank you.
-
Feb 20th, 2018, 08:46 PM
#2
Re: A VB.NET equivalent of a PHP hash function
Hashing is performed on Byte arrays. The Byte array is the "raw binary data". Where the source Byte array comes from (file, text, Image, etc) is irrelevant to the hashing process, as is where the resultant Byte array goes to. In your VB code, ByteString (which is a poor name) contains the raw binary data that you want.
You can't really have a single method that returns either a String or a Byte array unless you declare the return type as Object, which is a fairly bad idea. I'd suggest two methods: one that returns a String and one that returns a Byte array. The first of those would call the second and convert the Byte array to a hex string.
-
Feb 21st, 2018, 10:30 AM
#3
Re: A VB.NET equivalent of a PHP hash function
Yeah, what you're asking for is considered bad practice in VB. PHP is a loosely-typed dynamic language and, for years, was designed by monkeys, so the convention is to return many different types from functions and to not always document every case. In VB .NET, you have to up-front declare your return type and write code that provably returns that type.
So in VB .NET, I'd expect an API surface like this:
Code:
Function GetSHA256(...) As Byte()
' <do the things to get the byte array>
End Function
Function GetSHA256AsString(...) As String
Dim bytes() As Byte = GetSHA256(...)
' <do the things to convert the byte array to a String>
End Function
There are a couple of other ways to make it nice, but that is the simplest approach. You could, for example, make a type to help out:
Code:
Public Class SHA256Data
Public Property Hash() As Byte()
Public Property HashString() As String
End Class
Then you can write one function that returns both things:
Code:
Function GetSHA256(...) As SHA256Data
Dim hashBytes() As Byte
' <do the thing to set hashBytes to the proper hash bytes>
Dim hashString As String
' <do the thing to set hashString to the right String
Return New SHA256Data() With {
.Hash = hashBytes,
.HashString = hashString
}
End Function
This answer is wrong. You should be using TableAdapter and Dictionaries instead.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|