2017-09-20 6 views
1

Ich muss eine SHA-256 Prüfsumme aus einer Zeichenfolge generieren, die als get param gesendet wird.Wie korrekt SHA-256-Prüfsumme für eine Zeichenfolge in Scala generieren?

Wenn gefunden this link, um die Prüfsumme zu generieren.

Genrating die Prüfsumme wie folgt:

val digest = MessageDigest.getInstance("SHA-256");  
    private def getCheckSum() = { 
    println(new String(digest.digest(("Some String").getBytes(StandardCharsets.UTF_8))))   
    } 

druckt Prüfsumme ähnlich wie diese:

*║┼¼┬]9AòdJb:#↓o6↓T╞B5C♀¼O~╟╙àÿG 

Die API, die wir brauchen diese senden die Prüfsumme sagt sollte wie folgt aussehen:

45e00158bc8454049b7208e76670466d49a5dfb2db4196 

Was mache ich falsch?

Bitte beraten. Danke.

+0

Sie Nachrichtenauszug wird rohe Bytes zurückgeben. Sie erwarteten Format verlangt, dass sie hier als Hex – puhlen

Antwort

0

.digest gibt ein Byte-Array.

scala> import java.security.MessageDigest 
import java.security.MessageDigest 

scala> import java.math.BigInteger 
import java.math.BigInteger 

scala> MessageDigest.getInstance("SHA-256").digest("some string".getBytes("UTF-8")) 
res6: Array[Byte] = Array(97, -48, 52, 71, 49, 2, -41, -38, -61, 5, -112, 39, 112, 71, 31, -43, 15, 76, 91, 38, -10, -125, 26, 86, -35, -112, -75, 24, 75, 60, 48, -4) 

die Hex zu erstellen, verwenden String.format,

scala> String.format("%032x", new BigInteger(1, MessageDigest.getInstance("SHA-256").digest("some string".getBytes("UTF-8")))) 
res4: String = 61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc 

Sie Hash mit Kommandozeilen-Tool in Linux, Unix

$ echo -n "some string" | openssl dgst -sha256 
61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc 
+0

Kleine Fehler codiert werden, String-Darstellung fehlt 0 führender, zum Beispiel String '39' kehrt' b918943df0962bc7a1824c0555a389347b4febdc7cf9d1254406d80ce44e3f9' statt '0b918943df0962bc7a1824c0555a389347b4febdc7cf9d1254406d80ce44e3f9' – Gustek

4

Equivalent, aber ein bisschen mehr überprüfen kann effizient:

MessageDigest.getInstance("SHA-256") 
    .digest("some string".getBytes("UTF-8")) 
    .map("%02x".format(_)).mkString 
+1

Hash-Code erzeugt Ihre Mehtod doesnt verwenden scheinen gleichwertig zu sein zu was mit der Methode aus der vorherigen Antwort generiert wird: https://imgur.com/a/a3Gfv –

+0

Ja, tut mir leid, dass. Jetzt behoben. – Dima

Verwandte Themen