VB.NET e sizeof

Sto convertendo del codice da C # a VB.NET. Ho la seguente riga in C #

var bytes = new byte[password.Length * sizeof(char)]; 

Guardando su MSDN sembra che VB.NET non abbia l’operatore sizeof . Capisco che ci sia un Marshal.SizeOf ma un’ulteriore documentazione MSDN afferma che il valore restituito può essere diverso da quello di sizeof .

Qualcuno può aiutare? Esiste una dichiarazione equivalente in VB.NET?

Informazioni aggiuntive

Il mio objective è quello di convertire una password in una matrice di byte che posso quindi hash e quindi memorizzare in un database o confrontare con un hash precedentemente memorizzato. Ma non voglio necessariamente una risposta relativa alla mia situazione particolare.

 Dim bytes(password.Length * xxx) As Byte System.Buffer.BlockCopy(password.ToCharArray(), 0, bytes, 0, bytes.Length) Dim sha512 = System.Security.Cryptography.SHA512.Create() Dim hash = sha512.ComputeHash(bytes) ' compare hash or stroe in database 

L’operatore ‘Len’ in VB farà questo (ma funziona su istanze, quindi è necessario regolare di conseguenza):

 Dim bytes = New Byte((someString.Length * Len(New Char)) - 1){} 

Il Char di VB.NET si associa a System.Char di .NET, che è definito in ECMA 335 come un carattere Unicode a 16 bit. Significato, Char ha una dimensione fissa (non importa su quale piattaforma compili o esegui il tuo codice), in realtà non hai bisogno di sizeof .

Pertanto, basta moltiplicare per 2 .

Sto cancellando una password e stavo seguendo stackoverflow.com/a/10380166/1113475

La risposta migliore è sbagliata, nonostante il numero elevato di voti. Il codice per quella risposta utilizza ancora una codifica (Unicode), perché è così che tutte le stringhe sono codificate internamente in .Net. Anche se non fosse così, la codifica è ancora importante, perché è necessario essere in grado di decifrare la stringa su un sistema diverso da quello che lo ha crittografato e avere risultati significativi. Anche con lo stesso sistema che esegue la crittografia / decrittografia, tutto ciò che è semplice come una patch di Windows Update nel framework .Net potrebbe infrangerlo. Scegli una codifica (come Unicode o UTF-8) e chiama semplicemente il metodo GetBytes () :

 Dim bytes = Encoding.Unicode.GetBytes(password)