Frage

Auf dieser Seite:

http://www.shutterfly.com/documentation/OflyCallSignature.sfly

es heißt, wenn Sie einen Hash erzeugen Sie dann:

wandeln den Hash in eine hexadezimale Zeichenfolge

ist es Code in csharp dies zu tun?

War es hilfreich?

Lösung

, um den Hash zu erhalten, verwenden Sie die System.Security.Cryptography.SHA1Managed Klasse .

Bearbeiten : Wie folgt aus:

byte[] hashBytes = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(str));

Um den Hash zu einem Hex-String zu konvertieren, verwenden Sie den folgenden Code:

BitConverter.ToString(hashBytes).Replace("-", "");

Wenn Sie eine schnellere Implementierung möchten, verwenden Sie die folgende Funktion:

private static char ToHexDigit(int i) {
    if (i < 10) 
        return (char)(i + '0');
    return (char)(i - 10 + 'A');
}
public static string ToHexString(byte[] bytes) {
    var chars = new char[bytes.Length * 2 + 2];

    chars[0] = '0';
    chars[1] = 'x';

    for (int i = 0; i < bytes.Length; i++) {
        chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
        chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
    }

    return new string(chars);
}

Andere Tipps

kann ich noch nicht kommentieren, nicht genug rep, aber Lior Java mit C # in einer sehr falschen Antwort ist das Mischen.

Byte in C # ist ein Byte ohne Vorzeichen, die das komplette Gegenteil von allen anderen ganzzahligen Typen in C # ist, die standardmäßig signiert ist.

Der 0xFF Teil völlig sinnlos ist, denn selbst wenn Byte unterzeichnet wurde, 0xFE zum Beispiel ist -2. Mit Hilfe eines bitweise und mit 0xFE und 0xFF zum Beispiel würde nicht negative Zahl 0xFE stoppen das Ergebnis von zu sein. 0x7F würde.

In Bezug auf die Top-Antwort, ich bin ziemlich sicher, dass diese Mikro-Optimierungen helfen könnten, wenn auch sie Mikro-Optimierungen sind, die wahrscheinlich zu keinen wirklichen Unterschied machen, weil der JIT-Compiler nur etwas tun könnte sonst und weil Computer sind einfach zu extrem schnelle.

    chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
    chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);

Kleine Änderung, um es bitshift und bitweise ops anstelle des Teilers und Modulo zu machen verwenden.

    chars[2 * i + 2] = ToHexDigit((bytes[i] >> 4) & 0xF);
    chars[2 * i + 3] = ToHexDigit(bytes[i] & 0xF);

Das ist die andere „Optimierung“, obwohl ich es als besser lesbar, was zu sehen. Vielleicht ist das, weil ich die meisten der ASCII-Tabelle auswendig kennen.

    private static char ToHexDigit(int i)
    {
        return (char)(i + (i < 10 ? 48 : 55));
    }

Wenn Sie versuchen, kleingeschrieben hex zu erreichen (ohne ToLower), nur 55 tauschen mit 87. Es macht es ganz einfach.

Update: Es sieht aus wie Lior oder jemand entfernt seine sehr off Antwort. Das war ein guter Schritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top