VB.Net 控制台应用程序返回 SHA512 哈希值

2024-04-04

我正在尝试在 VB.Net (2008) 中编写一个控制台应用程序来接受命令行参数输入(密码)并输出哈希值。我修改了这样它就会接受一个参数,并且我添加了自己的盐/密钥,但是与相同密码和盐的 PHP 输出相比,输出似乎不正确。

我需要这样的东西,这样我就可以使用 MS Access VBA 获取 SHA512 哈希值。您能否推荐一个比我正在尝试的更好的解决方案,或者向我指出比上面的链接更简单的解决方案?我可以在这里发布我的代码,但它很长。

Edit1:我现在使用下面 Smerkin Gherkin 的代码,但我的 PHP 哈希和 VB.Net 哈希仍然不匹配。我在两者上使用的密码和盐(仅作为测试)是:Password1 abcd1234

我的 VB.Net 代码如下所示:SHA512Hasher.HexHash("密码1", "abcd1234")

我的 PHP 代码如下所示:echo hash_hmac("sha512", "密码1", "abcd1234");

VB.Net 返回:4E1112E5D2995ECDBF5777BA2B5425B86164044B1564D4A2E0232F5E5BC4A4DA34E9AD8C2E5F664FE795C5ED12753B56563164F239070C45B8278F268A8A0860

PHP 返回这个:46d338722b931f2e025ecaa7853da070ad74a4e648c48633388740d647f1edba7f83afe43a104d7f7e0662e130a184743caea39177bc8deda030087d9e425e09

有什么想法我做错了吗?


最简单的选择是使用System.Security.Cryptography.Sha512Managed目的。下面的示例将以 base64 字符串或十六进制字符串的形式返回 SHA512 哈希值。

Public Class SHA512Hasher

    Private Sub New()
        ' Prevent instantiation
    End Sub

    Public Shared Function Base64Hash(ByVal clearText As String) As String
        Dim hashedBytes As Byte() = computeHash(clearText)
        Return Convert.ToBase64String(hashedBytes)
    End Function

    Public Shared Function Base64Hash(ByVal clearText As String, ByVal salt As String) As String
        Return Base64Hash(salt & clearText)
    End Function

    Public Shared Function HexHash(ByVal clearText As String) As String
        Dim hashedBytes As Byte() = computeHash(clearText)

        ' Build the hex string by converting each byte.
        Dim hexString As New System.Text.StringBuilder()
        For i As Int32 = 0 To hashedBytes.Length - 1
            hexString.Append(hashedBytes(i).ToString("X2")) ' Use "x2" for lower case
        Next

        Return hexString.ToString()
    End Function

    Public Shared Function HexHash(ByVal clearText As String, ByVal salt As String) As String
        Return HexHash(salt & clearText)
    End Function

    Private Shared Function computeHash(ByVal clearText As String) As Byte()

        Dim encoder As New Text.UTF8Encoding()
        Dim sha512hasher As New System.Security.Cryptography.SHA512Managed()
        Return sha512hasher.ComputeHash(encoder.GetBytes(clearText))

    End Function

End Class

用于将一些输出打印到命令行的简单控制台应用程序是

Module Module1

    Sub Main()
        Dim clear As String = "Foo"
        Dim salt As String = "Salted"

        Console.WriteLine(SHA512Hasher.Base64Hash(clear))
        Console.WriteLine(SHA512Hasher.Base64Hash(clear, salt))
        Console.WriteLine(SHA512Hasher.HexHash(clear))
        Console.WriteLine(SHA512Hasher.HexHash(clear, salt))

    End Sub

End Module

Edit1 - 更新以响应有问题的 Edit1

php 函数使用一个键对值进行哈希处理,这与对哈希值加盐(在明文前面加上盐值作为前缀)不同。要使用的 .Net 对象是System.Security.Cryptography.HMACSHA512。上述代码的更新版本是:

Public Class HMACSHA512Hasher

    Private Sub New()
        ' Prevent instantiation
    End Sub

    Public Shared Function Base64Hash(ByVal clearText As String) As String
        Return Base64Hash(clearText, String.Empty)
    End Function

    Public Shared Function Base64Hash(ByVal clearText As String, ByVal key As String) As String
        Dim hashedBytes As Byte() = computeHash(clearText, key)
        Return Convert.ToBase64String(hashedBytes)
    End Function

    Public Shared Function HexHash(ByVal clearText As String) As String
        Return HexHash(clearText, String.Empty)
    End Function

    Public Shared Function HexHash(ByVal clearText As String, ByVal key As String) As String
        Dim hashedBytes As Byte() = computeHash(clearText, key)

        ' Build the hex string by converting each byte.
        Dim hexString As New System.Text.StringBuilder()
        For i As Int32 = 0 To hashedBytes.Length - 1
            hexString.Append(hashedBytes(i).ToString("x2")) ' Use "x2" for lower case
        Next

        Return hexString.ToString()
    End Function

    Private Shared Function computeHash(ByVal clearText As String, ByVal key As String) As Byte()

        Dim encoder As New Text.UTF8Encoding()
        Dim sha512hasher As New System.Security.Cryptography.HMACSHA512(encoder.GetBytes(key))
        Return sha512hasher.ComputeHash(encoder.GetBytes(clearText))

    End Function

End Class

我还更改了 hex 函数以返回小写哈希以匹配 php 结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VB.Net 控制台应用程序返回 SHA512 哈希值 的相关文章

  • 如何在vb.net中对datagridview的3列进行排序

    下面我想对 ProductCode ColorCode 和 Size 列进行排序 请指导 对 大小 列中的信息进行排序 Size Number sequence XS 1 S 2 M 3 L 4 XL 5 XXL 6 2L 7 3L 8 4
  • 如何在vb.net中实现事务方式?

    我使用 VB net 200 开发一个连接到 MS Access 数据库的应用程序 我使用 TableAdapter 和 Dataset 连接到 Access DB 文件 我需要实现一个简单的事务方法 提交 回滚 来保存到数据库 有没有一种
  • 如何从 SQL Server 存储过程返回值并在 Access VBA 中使用它们

    我已经在 SQL Server 中设置了一个运行良好的存储过程 我现在可以从 VBA 调用它 但想返回一个值以了解是否存在任何错误等 我的 SP 中的最后一个参数设置为 OUTPUT DataSetID int 0 Destination
  • 键入时自动滚动 DataGridView

    我遇到这个问题 DataGridView 中的最后一列太长 您需要使用滚动条来显示该列的其余部分 但是当我输入文本时 它不会在输入时自动滚动 我想要的是 我想在打字时自动滚动滚动条 以便用户在打字时不必使用滚动条 这是图像 As you c
  • 级联通用接口

    我正在构建自己的框架来包装通过暴露的接口Microsoft Office Interop 我将 Office 范围的功能包装到第一组接口中 然后由第二组功能继承 这些功能依赖于应用程序 这是一个简化版本 Region Office Wrap
  • SQL 查询用于计算每个客户的订单数量和总金额

    我有两张桌子Order与列 OrderID OrderDate CID EmployeeID And OrderItem与列 OrderID ItemID Quantity SalePrice 我需要返回客户 ID CID 每个客户的订单数
  • 如何使用 vb.net 将数据插入 Access 表?

    我想在 Access 数据库中插入一个新行 我正在考虑做类似的事情 oConnection new Connection connectionstring oTable oCennection table Orders oRow oTabl
  • 在 VB2010 Windows 窗体开始时播放 .wav/.mp3 文件?

    制作 VB2010 已经大约一年了 最近开始突破我可以将哪种媒体合并到我的表单中的界限 但我无法播放 wav 或 mp3 文件 我尝试按照微软和其他编码网站上的教程进行操作 但没有成功 任何帮助 将不胜感激 要播放波形文件 您可以简单地使用
  • 获取 FTP 服务器上的文件大小并将其放在标签上

    我正在尝试获取托管在FTP服务器并将其放入Label而 BackgroundWorker 在后台工作 我在用着 Try 来获取该值 但是该值在第一次尝试时被捕获 下载后 如果我按尝试再次获取它 那么它就可以工作 Note 第一次尝试时进度条
  • 在 VB.NET 中将类标记为静态

    正如刚刚在最近的一篇文章中所说question https stackoverflow com questions 135759 why cant i inherit iodirectory and answer https stackov
  • 从图形创建图像

    在 VB NET 中 我需要创建一个Image基于一个Graphics我有对象 但是 没有诸如此类的方法Image fromGraphics 等等 那我该怎么办 尝试这样的事情MSDN 文章 http msdn microsoft com
  • UCanAccess:向现有表添加列

    我有一个正在运行的 Java 项目 它使用 Access accdb 数据库来存储数据 我正在对我的程序进行更新 以便为用户提供更多功能 为此 我需要向填充数据的现有表添加一列 当我研究时 我发现 UCanAccess 不支持 ALTER
  • Excel 单元格对齐:例如数值xlLeft、xlRight 还是 xlCenter?

    我一直在尝试对齐 Excel 单元格文本值 我尝试过更常见的xlLeft xlRight但这似乎不起作用 错误是xlLeft没有宣布 我正在使用 Visual Studios 并使用 VB 创建一个 aspx 页面 这是我的代码示例 Dim
  • 在 ASP.Net 2008 或更高版本中创建复合和自定义网格控件[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 请建议我如何创建复合网格 即 我需要 Framework 3 5 及更高版本中 gridview 的所有功能 但还需要在
  • Roslyn:将 C# 转换为 VB

    我有这样的情况 我需要将 C 项目转换为 VB NET 项目 我想自动化这个 所以我不能使用在线工具或类似的东西 有 粘贴为 C VB 示例 Visual Studio 扩展 https github com akimboyko MetaP
  • VB.NET 中的 Excel 自动调整列

    我这里有我的 VB6 代码并且运行良好 For CLms 1 To 10 ws Columns CLms AutoFit lt Autofilt data on XL sheet Next CLms 我已经搜索了如何在 VB NET 中使
  • 获取每件商品的最新价格

    我有一张桌子 ItemID PurchaseDate Price 001 03 17 2013 19 00 002 03 17 2013 14 00 001 03 18 2013 13 00 002 03 18 2013 15 00 001
  • 打开 Access 2007 文件

    我正在尝试打开受我们客户端保护的 Access 2007 文件 当我双击它时 它显示以下错误 错误 您没有使用该对象所需的权限 让您的系统管理员或创建此对象的人员为您建立适当的权限 错误3033 在我搜索此解决方案时 我了解到它受 Wind
  • VBA:如何从 MS Access 运行另一个应用程序

    我一直在试图解决这个问题 但似乎我在任何地方都找不到解决该问题的方法 这是第一部分 VBA Shell 命令始终返回 找不到文件 https stackoverflow com questions 10439024 vba shell co
  • 在运行时从调试可视化工具中检测源语言

    我正在写一个Visual Studio 的调试可视化工具 https github com zspitz ExpressionToString visual studio debugger visualizer for expression

随机推荐

  • Push 替换数组中的旧值

    也许是因为我工作了一整天 我看不到问题所在 但在下面的代码中 警报仅显示最后添加的值 并且不会将值推送到数组中 window sortControl sortControlPanel div sortControl simpleSortCr
  • 为什么 DbSet.Add 工作这么慢?

    8 个月前曾在这里讨论过同样的话题 如何加快 DbSet Add 的速度 https stackoverflow com questions 4355474 how do i speed up dbset add 除了使用 SqlBulkC
  • JavaFX 字体渲染中的错误字符间距(字距调整)(在 Linux 中)

    我已经开始在 JavaFX 中开发一个应用程序 并且遇到了一个问题 我可以找到很少的有用信息 Linux 中字符之间的间距非常不均匀 我不是在谈论不同字符的宽度 而是在谈论字符之间的空格 它在普通文本中可见 但以下示例比普通文本更好地说明了
  • 如果满足多个条件,则具有重置选项的累积和

    如果满足多个条件 我正在尝试使用重置选项进行累积总和 更具体地说 我想对变量进行累积求和amount and count分组依据id如果满足这两个条件 则重新从 0 开始重置 amount gt 10 且count gt 3 我还想创建一个
  • Android-Facebook SDK:无法共享照片,对话框不显示

    这是我第一次使用Android Facebook SDK 我正在尝试发布位图 但我不断收到此消息 Warning Error com facebook FacebookException Failed to copy image 我可以发布
  • ruby base64 通过以 2 位字符开头来编码 128 位数字,以防止末尾填充

    这个问题是我之前问题的后续 如何在 Ruby 中使用自定义字符集将 UUID 转换为字符串 https stackoverflow com questions 47803212 how can i convert a uuid to a s
  • 无法从 Xcode 6.1 中的情节提要连接自定义协议委托

    我刚刚将我的 mac 升级到 10 10 将 Xcode 升级到 6 1 发现一个关于故事板的奇怪的事情 我的案例使用的是 swift 项目 无法再从故事板连接自定义协议委托 旧版本 Xcode 附带的旧连接很好 但我无法再连接任何新委托
  • Keras:TimeDistributed + InceptionV3 错误

    当我尝试在 TimeDistributed 包装器中使用 Inception 时 我在 Keras 中遇到了一个非常奇怪的错误 这段代码很简单 应该适用于许多模型或层 但奇怪的是 inception v3在预测时失败 import nump
  • 检查单实例java程序[重复]

    这个问题在这里已经有答案了 我有一个 Java 程序 带有 swing gui 我希望只存在 1 个实例 如果它尝试打开程序的另一个实例 我希望将当前实例带到前台 我该怎么做呢 提前致谢 使用启动应用程序Java网络启动 https sta
  • NV21 格式和奇数图像尺寸

    我在 Android 中使用 NV21 图像已经有一段时间了 我一直在跟踪可能由 NV21 图像中不正确的索引字节引起的错误 答案中的图片这个问题 https stackoverflow com questions 5272388 extr
  • 根据buildType更改android项目中的.properties文件和settings.gradle文件

    我有一个 android gradle 项目 其中有两种构建类型 QA 和 prod 我想根据构建类型更改 properties 文件中的属性 我还想根据 buildType 更改 settings gradle 文件中的值之一 我是 an
  • 使用Karate REST API工具上传文件

    我正在尝试使用空手道在特定的松弛通道上上传图像 但没有运气 我尝试了多次不同的步骤 但仍然有 200 响应 并且图像未显示在通道中 尝试发布文字内容并成功在频道上找到文字 以下是我根据空手道文档尝试过的两个 post Feature Pos
  • 如何创建如下所示的交叉表报表?

    是否可以使用 Crystal Report 交叉表创建以下报表 这是报告 Growth Rate Last Year First Year Total each Area 这是我的结果集 Year Area PeopleCount 2005
  • 调整图像大小以适合 div + 保持比例 + 水平和垂直居中 + 圆角

    问题 调整图像大小以适合 div 已解决 保持比例已解决 水平和垂直居中 已解决 圆角 a 矩形图像 已解决 b 横幅图像 不可能的 所以问题是 如何去掉图像的矩形角 请看这里看看问题所在 gt gt gt http jsfiddle ne
  • 安装WDK VC++后损坏

    从以下位置安装 WDK https learn microsoft com en us windows hardware drivers download the wdk https learn microsoft com en us wi
  • 按给定位置将字符串分成两部分

    string Some string pos 5 begging Some s end tring 按给定位置将字符串分成两部分的最佳方法是什么 您可以使用substr http php net substr获取两个子字符串 str1 su
  • 如何发现 Heroku 上的内存泄漏?

    我有一个在 Heroku Cedar 上使用 Ruby 1 9 3 运行的 Rails 3 2 8 应用程序 该应用程序启动时运行良好 但连续使用一天左右后 我开始在日志中看到 R14 错误 一旦内存错误开始 即使应用程序闲置几个小时 它们
  • scikit-learn 中的 TfidfVectorizer:ValueError:np.nan 是无效文档

    我正在使用 scikit learn 中的 TfidfVectorizer 从文本数据中提取一些特征 我有一个 CSV 文件 其中包含分数 可以是 1 或 1 和评论 文本 我将这些数据提取到 DataFrame 中 以便可以运行 Vect
  • 尝试填充浮点数组时出现 ArrayStoreException

    为什么以下代码会引发异常 这意味着什么 float foo array new float WIDTH HEIGHT Assume WDITH and Height are defined java util Arrays fill foo
  • VB.Net 控制台应用程序返回 SHA512 哈希值

    我正在尝试在 VB Net 2008 中编写一个控制台应用程序来接受命令行参数输入 密码 并输出哈希值 我修改了这样它就会接受一个参数 并且我添加了自己的盐 密钥 但是与相同密码和盐的 PHP 输出相比 输出似乎不正确 我需要这样的东西 这