Update: Ich habe endlich geschafft, den gesamten Java-Code wie für den Third-Party-Service erforderlich neu zu erstellen. Ich muss hinzufügen, dass einige der verwendeten Bibliotheken veraltet sind, aber ich kann nichts tun, weil das ist, was die andere Seite benutzt, und ich muss es einhalten.Verschlüsselung und Codierung (AES, UTF-8 und base64) Code-Konvertierung von JAVA zu node.js mit unterschiedlichen Ergebnissen
Java-Code
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(),
"AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(1, secretKeySpec);
byte[] aBytes = cipher.doFinal(inputString.getBytes());
Eingabe-Taste: xxxxxxxxyyyyyyyy
Eingabetext: maryhadalittlelamb
-CodeAusgang: Z22GETg3Anl92% 2BoyqdVWs9haQveaZxkDn8sQYP08iCY% 3D
node.js
var cipher = crypto.createCipher('aes-128-ecb', key);
var encryptedPassword = cipher.update(text, 'utf8', 'base64');
encryptedPassword += cipher.final('base64');
console.log(encryptedPassword);
Eingabe-Taste: xxxxxxxxyyyyyyyy
Eingabetext: maryhadalittlelamb
Ausgang: mnqrpA2eqAhmseTrkBtH3YSGMoFs + ECPUamVd8/bgAQ =
Der Ausgang für gleiche input und der Schlüssel ist für beide unterschiedlich. Tatsächlich ist die node.js anders, aber die base64 sieht trotzdem identisch aus.
Ich bin ziemlich neu zu diesen Dingen, deshalb habe ich mein Mai verloren.
Sie müssen genau herausfinden, was 'SecretKeySpec' ausgibt. Wenn Sie jedem AES-Kern die gleichen Schlüsselbytes geben und dieselbe Schlüsselgröße und denselben Schlüsselmodus wählen, sollten sie kompatibel sein. beiseite: ecb ist ein schwacher Modus, verwenden Sie etwas besser, wenn möglich. – dandavis
@dandavis Der Java-Code gehört zum Dienst eines Drittanbieters, der nicht unter meiner Kontrolle steht, daher muss ich die Daten so senden, wie sie wollen. Was und wie muss ich mit/in SecretKeySpec überprüfen? –
Ich rate es eine KDF, und Sie müssen in der Lage sein, die Eingabe> Ausgabe in Knoten für die AES zu reproduzieren, um die gleichen tatsächlichen Schlüssel in beiden Umgebungen zu verwenden. – dandavis