Ich versuche Javascript zu schreiben, um die Ausgabe von diesem Java-Code entsprechen:Encrypt in Javascript entsprechen Java
Java:
import java.util.Base64;
public class Enc2 {
public static void main (String[] arg) {
System.out.println(encryptSomeNumber("1234567812345678"));
}
public static String encryptSomeNumber(final String SomeNumber){
String encryptedSomeNum = "";
String ALGO = "AES";
try {
String myKey = "DLDiGPqGysAow3II";
byte[] keyBytes = myKey.getBytes("UTF-8");
java.security.Key encryptkey = new javax.crypto.spec.SecretKeySpec(keyBytes, ALGO);
javax.crypto.Cipher c;
c = javax.crypto.Cipher.getInstance(ALGO);
c.init(javax.crypto.Cipher.ENCRYPT_MODE, encryptkey);
byte[] encVal = c.doFinal(SomeNumber.getBytes());
byte[] encodedBytes = Base64.getEncoder().encode(encVal);
String s = new String(encodedBytes);
encryptedSomeNum = s;
} catch (Exception e) {
System.out.println("error when encrypting number");
return encryptedSomeNum;
}
return encryptedSomeNum;
}
}
Ausgang: Wrs66TuAIxYe + M4fqyyxtkyMFkWGwx9i45 + oQfEA4Xs =
Javascript dass ich bisher (NodeJS v8.7.0) haben:
let crypto = require('crypto');
let algorithm = 'aes-128-ecb';
let password = 'DLDiGPqGysAow3II';
function encrypt(buffer){
let cipher = crypto.createCipher(algorithm, password)
let crypted = Buffer.concat([cipher.update(buffer), cipher.final()]);
return crypted;
}
let cyphertext = encrypt(new Buffer("1234567812345678", "utf8"))
console.log(cyphertext.toString('base64'));
Ausgang: m1jnKjBbKu + m/zsf9DBTMo3NL 4E035l0EailFjt/qjo =
Kann jemand sehen, was ich hier vermisse? Etwas mit PKCS-Padding?
Danke. Also ist SecretKeySpec die Schlüsselableitungsfunktion in diesem Fall? –
Nein, in Java gibt es keine Schlüsselableitung. Der Schlüssel ist die ASCII/UTF-8-Kodierung von "DLDiGPqGysAow3II". 'SecretKeySpec' ist nur ein Wrapper dafür. –
Danke für die Beratung Maarten. Ich wechselte in den CBC-Modus und verwendete eine leere IV und übergab diese an crypto.createCipheriv(). Dann musste dem Klartext 16 0x10 Bytes hinzugefügt werden, um die passende Ausgabe zu erhalten. Warum fügt Java 16 0x10 Bytes hinzu? –