vb.net - 什么是 Visual Basic .Net 上的等效 hash_hmac PHP
问题描述
我正在将我在 PHP 上获得的 hash_hmac 代码重写为 VB.Net。我需要在 PHP 和 VB.Net 中生成相同的结果。
这是 PHP 上的 hash_hmac 代码:
$data = urlencode('2019-07-21T15:30:57.465Z');
$data = '_ts='.$data;
$signatureSecretKey = "secrete";
$hash = hash_hmac('sha256',$data,$signatureSecretKey,true);
$signature = base64_encode($hash);
echo $signature;
结果显示:
upLQYFI3pI2m9Pu5fyiobpvCRhTvRmEyxrVDrdJOYG4=
这是我在 VB 上的代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim _ts, data, signature, secrete, hash
secrete = "secret"
_ts = DateTime.Now.ToString("2019-07-21T15:30:57.465Z")
data = "_ts=" & HttpUtility.UrlEncode(_ts)
signature = Encrypt(data, secrete)
TextBox1.Text = signature
End Sub
Public Function Encrypt(Content As String, Secret As String) As String
Dim kode As New System.Text.ASCIIEncoding()
Dim getkode As Byte() = kode.GetBytes(Secret)
Dim cont As Byte() = kode.GetBytes(Content)
Dim hmcKu As New HMACSHA256(getkode)
Dim HashCode As Byte() = hmcKu.ComputeHash(cont)
Return Convert.ToBase64String(HashCode)
End Function
我的代码结果是:
892q1ArPxIqrX48PQegliVql703V2fcipb5A08F053o=
您可以看到我的 VB 代码与 PHP 生成不同的结果。我几乎尝试了从互联网上获得的所有方法,但结果总是不同。那么,什么是 VB 上 PHP 的等效 hash_hmac 以及获得相同结果的正确方法是什么?请帮忙?
解决方案
我从 fb 社区找到了解决方案。这是这种情况的确切解决方案:
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
Imports System.Text.RegularExpressions
Public Class Form1
Private Shared DES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim _ts, data, signature, secrete
secrete = "secret"
_ts = DateTime.Now.ToUniversalTime.ToString("yyyy-MM-dd\THH:mm:ss.fff\Z")
data = "_ts=" & HttpUtility.UrlEncode(_ts)
Dim reg = New Regex("%[a-f0-9]{2}")
data = reg.Replace(data, Function(m) m.Value.ToUpperInvariant())
signature = Encrypt(data, secrete)
TextBox1.Text = signature
End Sub
Public Function Encrypt(Content As String, Secret As String) As String
Try
Dim kode As New System.Text.ASCIIEncoding()
Dim getkode As Byte() = kode.GetBytes(Secret)
Dim cont As Byte() = kode.GetBytes(Content)
Dim hmcKu As New HMACSHA256(getkode)
Dim HashCode As Byte() = hmcKu.ComputeHash(cont)
Return Convert.ToBase64String(HashCode)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
End Class
推荐阅读
- php - 库存申请不会显示结果
- azure - 适用于 API 的 Azure AD B2C 登录和使用 API 唱歌(不是 html 页面)
- sql - 如何使用事务 sql 自动更改查询中的日期
- azure - Azure 定价页面中的 OCR 和识别文本有什么区别
- python - 在 CreateView 中上传图片
- regex - 如何在 Go 中缓存已编译的正则表达式
- angular - 使用材料模块从垫子输入更新日期
- javascript - 如何隐藏子元素而不是使用纯 Javascript 删除?
- python - 如何修复我的 IF 语句,以便我无法从列表中删除和附加项目
- javascript - 如何以简单的方式创建数据表?