Ich verwende diese Bibliothek in meiner Android App. Ich kann es erfolgreich kompilieren und binden die native Implementierung in meiner Android-App, aber die scryptN-Funktion erzeugt ein anderes Ergebnis, wenn es in einer 32-Bit- oder 64-Bit-Umgebung ausgeführt wird, wie kann es möglich sein? Die Java-Implementierung arbeitet stattdessen auch auf beiden UmgebungenSCrypt produziert unterschiedliche Ergebnisse auf x64-Plattform
das Problem zu reproduzieren, baut nur die gemeinsame Bibliotheken mit NDK und versucht, diese Funktion
public String hashPassword(String plainPassword) {
final int shift = 14;
final int n = 1 << shift;
final int r = 8;
final int p = 1;
final int dklen = 64;
try {
return ByteUtils.toHexString(SCrypt.scrypt(
plainPassword.getBytes("utf-8"),
"theseed".getBytes("utf-8"),
n, r, p, dklen));
} catch (Exception e) {
LogHelper.e("error hashing password", e);
return null;
}
}
Sie erhalten verschiedene Ausgänge zu laufen, wenn Sie auf einem 32-Bit laufen Architektur oder ein 64-Bit ein
Danke
Beispiele Code und Beispiel Eingabe/Ausgabe zu generieren? – zaph
Während es sehr "leet" sein kann, alle Anrufe in einem Durcheinander zu setzen, ist es praktisch unmöglich zu debuggen. Brechen Sie die Aufrufe 'plainPassword.getBytes' und' theseed.getBytes' in Zwischenvariablen und sie untersuchen sie in hex. Der erste Schritt beim Debuggen besteht darin, die Eingaben zu verifizieren. Machen Sie Code für den nächsten Reader und Debugger, lassen Sie den Compiler mit Optimierungen umgehen Die Zwischenvariable wird normalerweise während der Kompileroptimierung kombiniert. – zaph