


So simulieren Sie das Passwort-Hashing von pbkdf2-scala in Golang pbkdf2
我们的应用程序使用库 securehash 对象来创建单向密码: https://github.com/nremond/pbkdf2-scala/blob/master/src/main/scala/io/github/nremond/securehash.scala
现在我的问题是我在 go 中的代码返回 -1
进行密码检查。
package main import ( "bytes" "crypto/rand" "crypto/sha512" "fmt" "golang.org/x/crypto/pbkdf2" "math/big" "strings" ) func main() { iteration := 25000 // Hash User input password := []byte("123") salt := "yCyQMMMBt1TuPa1F9FeKfT0yrNIF8tLB" key := pbkdf2.Key(password, []byte(salt), iteration, sha512.Size, sha512.New) // COMPARE PASSWORD fetched from DB // 123 hash in scala tokenS := strings.Split("$pbkdf2-sha512$25000$yCyQMMMBt1TuPa1F9FeKfT0yrNIF8tLB$TtQt5BZLs4qlA0YAkcGukZwu7pkxOLcxwuoQB3qNtxM", "$") passwordHashInDatabase := tokenS[4] out := bytes.Compare(key, []byte(passwordHashInDatabase)) fmt.Println("out: ", out) }
正确答案
您有几个问题:
在将盐传递给
pbkdf2.key()
之前,您不会对盐进行 base64 解码,并且在将其与pbkdf2.key()
的结果进行比较之前,您不会对从数据库获取的密钥进行 base64 解码。另请注意,scala 实现在 base64 解码/编码之前/之后进行了一些字符替换。这也需要在 go 实现中复制。scala 实现中的
createhash()
方法有一个dklength
参数,默认为32
。在 go 实现中,您提供的是sha512.size
的结果,它是64
并且不匹配。我知道使用了默认值,因为数据库中的值是 32 字节长。
这是一个仓促修复的实现:
package main import ( "bytes" "crypto/sha512" "encoding/base64" "fmt" "log" "strings" "golang.org/x/crypto/pbkdf2" ) func b64decode(s string) ([]byte, error) { s = strings.replaceall(s, ".", "+") return base64.rawstdencoding.decodestring(s) } func main() { iteration := 25000 // hash user input password := []byte("123") salt, err := b64decode("ycyqmmmbt1tupa1f9fekft0yrnif8tlb") if err != nil { log.fatal("failed to base64 decode the salt: %s", err) } key := pbkdf2.key(password, salt, iteration, 32, sha512.new) // compare password fetched from db // 123 hash in scala tokens := strings.split("$pbkdf2-sha512$25000$ycyqmmmbt1tupa1f9fekft0yrnif8tlb$ttqt5bzls4qla0yakcgukzwu7pkxolcxwuoqb3qntxm", "$") passwordhashindatabase, err := b64decode(tokens[4]) if err != nil { log.fatal("failed to base64 decode password hash from the database: %s", err) } fmt.printf("%x\n%x\n", key, passwordhashindatabase) fmt.printf("%d\n%d\n", len(key), len(passwordhashindatabase)) out := bytes.compare(key, passwordhashindatabase) fmt.println("out: ", out) }
输出:
4ed42de4164bb38aa503460091c1ae919c2eee993138b731c2ea10077a8db713 4ed42de4164bb38aa503460091c1ae919c2eee993138b731c2ea10077a8db713 32 32 out: 0
Das obige ist der detaillierte Inhalt vonSo simulieren Sie das Passwort-Hashing von pbkdf2-scala in Golang pbkdf2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

In dem Artikel werden die Verwaltungs -Go -Modulabhängigkeiten über Go.mod erörtert, die Spezifikationen, Aktualisierungen und Konfliktlösung abdecken. Es betont Best Practices wie semantische Versioning und reguläre Updates.

In dem Artikel werden mit Tabellensteuerungstests in GO eine Methode mit einer Tabelle mit Testfällen getestet, um Funktionen mit mehreren Eingaben und Ergebnissen zu testen. Es zeigt Vorteile wie eine verbesserte Lesbarkeit, verringerte Vervielfältigung, Skalierbarkeit, Konsistenz und a
