VB.NET and sizeof

本文关键字:sizeof and NET VB | 更新日期: 2023-09-27 18:26:42

我正在将一些代码从C#转换为VB.NET

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

在MSDN上,VB.NET似乎没有sizeof运算符。我知道有一个Marshal.SizeOf,但MSDN文档进一步指出,返回的值可能与sizeof的值不同。

有人能帮忙吗?VB.NET中是否有等效的语句?

附加信息

我的目标是将密码转换为一个字节数组,然后我可以对其进行散列,然后将其存储在数据库中或与以前存储的散列进行比较。但我不一定想要一个与我的具体情况有关的答案。

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

VB.NET and sizeof

VB中的'Len'运算符会执行此操作(但它适用于实例,因此需要相应调整):

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

VB.NET的Char映射到.NET的System.Char,后者在ECMA335中定义为16位Unicode字符。也就是说,Char有一个固定的大小(无论您在哪个平台上编译或运行代码),实际上并不需要sizeof

因此,只需乘以2即可。

我正在散列密码,并关注stackoverflow.com/a/1380166/1113475

尽管票数很高,但最重要的答案是错误的。这个答案的代码仍然使用编码(Unicode),因为这就是所有字符串在.NET中内部编码的方式。即使没有,编码仍然很重要,因为你需要能够在与加密字符串的系统不同的系统上解密字符串,并获得有意义的结果。即使使用相同的系统进行加密/解密,像.NET Framework的Windows Update补丁这样简单的东西也可能会破坏这一点。选择一种编码(如Unicode或UTF-8),只需调用其GetBytes()方法:

Dim bytes = Encoding.Unicode.GetBytes(password)