不是来自 scrypt 算法的预期哈希值
Not the excpected hash from the scrypt algo
我在我的 vb 应用程序中使用来自 here 的这个 scrypt
我试过这段代码来散列一个十六进制字符串:
Imports Replicon.Cryptography.SCrypt
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ss() As Byte = System.Text.Encoding.Default.GetBytes(TextBox1.Text)
RichTextBox1.Text = System.Text.Encoding.Default.GetString(SCrypt.DeriveKey(ss, ss, 1024, 1, 1, 32))
End Sub
End Class
文本框内的十六进制字符串:
TextBox1.text = "01000000f615f7ce3b4fc6b8f61e8f89aedb1d0852507650533a9e3b10b9bbcc30639f279fcaa86746e1ef52d3edb3c4ad8259920d509bd073605c9bf1d59983752a6b06b817bb4ea78e011d012d59d4"
它给了我这个:
r3Î<ÛãhšÏ-$:8´"ýäP+°‡ W«&‰Â
小端倒序后的预期结果是这样的:
0000000110c8357966576df46f3b802ca897deb7ad18b12f1c24ecff6386ebd9
我觉得是字节转换、字符串转换的问题?
感谢帮助
感谢大家。
我找到了解决方案:
密码是:
Imports Replicon.Cryptography.SCrypt
Imports System.Globalization
Imports System.Text
Public Class Form1
Public Shared Function Btog(ByVal ba() As Byte) As String
Dim hex As StringBuilder = New StringBuilder(ba.Length * 2)
Dim b As Byte
For Each b In ba
hex.AppendFormat("{0:x2}", b)
Next
Return hex.ToString()
End Function
Public Function HexDecode(ByVal s As String) As Byte()
Return HexDecode(s, 0)
End Function
Public Function HexDecode(ByVal s As String, ByVal paddingBytes As Integer) As Byte()
If s Is Nothing Then
Throw New ArgumentNullException("s")
End If
If s.IndexOf(":"c) > -1 Then
s = s.Replace(":", "")
End If
If (s.Length Mod 2) <> 0 Then
Throw New FormatException("parameter 's' must have an even number of hex characters")
End If
Dim result As Byte() = New Byte(s.Length \ 2 + (paddingBytes - 1)) {}
For i As Integer = 0 To result.Length - paddingBytes - 1
result(i) = Byte.Parse(s.Substring(i * 2, 2), NumberStyles.AllowHexSpecifier)
Next
Return result
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RichTextBox1.Text = Btog(SCrypt.DeriveKey(HexDecode(TextBox1.Text), HexDecode(TextBox1.Text), 1024, 1, 1, 32))
End Sub
End Class
我在我的 vb 应用程序中使用来自 here 的这个 scrypt
我试过这段代码来散列一个十六进制字符串:
Imports Replicon.Cryptography.SCrypt
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ss() As Byte = System.Text.Encoding.Default.GetBytes(TextBox1.Text)
RichTextBox1.Text = System.Text.Encoding.Default.GetString(SCrypt.DeriveKey(ss, ss, 1024, 1, 1, 32))
End Sub
End Class
文本框内的十六进制字符串:
TextBox1.text = "01000000f615f7ce3b4fc6b8f61e8f89aedb1d0852507650533a9e3b10b9bbcc30639f279fcaa86746e1ef52d3edb3c4ad8259920d509bd073605c9bf1d59983752a6b06b817bb4ea78e011d012d59d4"
它给了我这个:
r3Î<ÛãhšÏ-$:8´"ýäP+°‡ W«&‰Â
小端倒序后的预期结果是这样的:
0000000110c8357966576df46f3b802ca897deb7ad18b12f1c24ecff6386ebd9
我觉得是字节转换、字符串转换的问题?
感谢帮助
感谢大家。
我找到了解决方案:
密码是:
Imports Replicon.Cryptography.SCrypt
Imports System.Globalization
Imports System.Text
Public Class Form1
Public Shared Function Btog(ByVal ba() As Byte) As String
Dim hex As StringBuilder = New StringBuilder(ba.Length * 2)
Dim b As Byte
For Each b In ba
hex.AppendFormat("{0:x2}", b)
Next
Return hex.ToString()
End Function
Public Function HexDecode(ByVal s As String) As Byte()
Return HexDecode(s, 0)
End Function
Public Function HexDecode(ByVal s As String, ByVal paddingBytes As Integer) As Byte()
If s Is Nothing Then
Throw New ArgumentNullException("s")
End If
If s.IndexOf(":"c) > -1 Then
s = s.Replace(":", "")
End If
If (s.Length Mod 2) <> 0 Then
Throw New FormatException("parameter 's' must have an even number of hex characters")
End If
Dim result As Byte() = New Byte(s.Length \ 2 + (paddingBytes - 1)) {}
For i As Integer = 0 To result.Length - paddingBytes - 1
result(i) = Byte.Parse(s.Substring(i * 2, 2), NumberStyles.AllowHexSpecifier)
Next
Return result
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RichTextBox1.Text = Btog(SCrypt.DeriveKey(HexDecode(TextBox1.Text), HexDecode(TextBox1.Text), 1024, 1, 1, 32))
End Sub
End Class