Beispiel 1:
Heutzutage war ich von einem Problem beunruhigt. Die AES -Verschlüsselung von NodeJS ist nicht mit der Verschlüsselung von Java und C# überein. Natürlich wird dies nicht entschlüsselt. Ich hatte lange Zeit zu kämpfen: Ich konnte es später immer noch nicht tun. Es wird online gesagt, dass sich die übliche Implementierung von Nodejs AES von anderen Sprachen unterscheidet. Ok ~~ vielleicht.
NodeJS Crypto -Modul.
Die Codekopie lautet wie folgt:
var crypto = required ('crypto');
var data = "156156165152165156156";
console.log ('Original ClearText:' + Data);
var Algorithmus = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
// var cipherencoding = 'hex';
// Wenn die nächste Zeile nicht in der Lage ist, ist der endgültige Clearext falsch.
var cipherencoding = 'base64';
/*Verschlüsselung*/
var cipher = crypto.createcipher (Algorithmus, Schlüssel);
var cipherchwers = [];
Cipherchwers.push (Cipher.Update (Daten, ClearEncoding, Cipherencoding));
cipherchwers.push (cipher.final (cipherencoding));
console.log (cipherencoding + 'chipheText:' + cipherchwers.join (''));
/*Entschlüsselt*/
var decipher = crypto.CreateCipher (Algorithmus, Schlüssel);
var plainchunks = [];
für (var i = 0; i <cipherchwers.length; i ++) {
plainchunks.push (decipher.update (cipherchwers [i], cipherencoding, clearencoding));
}
plainchunks.push (decipher.final (clearEncoding));
console.log ("utf8 plaintext entschieden:" + plainchunks.join (''));
In der Tat ist das richtig ~~ Verschlüsselung und Entschlüsselung sind erfolgreich. Aber es unterscheidet sich von denen, die in Java und C#verschlüsselt sind. Gott. Ich denke, jeder kämpft hier ~~, oder? Fügen Sie in der Tat einfach einen Vektor hinzu und er wird konsistent sein. Es sind zu wenige Ressourcen online durchsucht. Es ist nur so, dass ich so lange zu kämpfen habe. Ok, der richtige Code ist:
Die Codekopie lautet wie folgt:
var crypto = required ('crypto');
var data = "156156165152165156156";
console.log ('Original ClearText:' + Data);
var Algorithmus = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
var iv = "";
// var cipherencoding = 'hex';
// Wenn die nächste Zeile nicht in der Lage ist, ist der endgültige Clearext falsch.
var cipherencoding = 'base64';
var cipher = crypto.createcipheriv (Algorithmus, Schlüssel, iv);
var cipherchwers = [];
Cipherchwers.push (Cipher.Update (Daten, ClearEncoding, Cipherencoding));
cipherchwers.push (cipher.final (cipherencoding));
console.log (cipherencoding + 'chipheText:' + cipherchwers.join (''));
var decipher = crypto.CreateCipheriv (Algorithmus, Schlüssel, iv);
var plainchunks = [];
für (var i = 0; i <cipherchwers.length; i ++) {
plainchunks.push (decipher.update (cipherchwers [i], cipherencoding, clearencoding));
}
plainchunks.push (decipher.final (clearEncoding));
console.log ("utf8 plaintext entschieden:" + plainchunks.join (''));
Vergleichsweise wurde festgestellt, dass die Verschlüsselung konsistent war. OK, post ~~~ Ich hasse dich, habe meinen Tag verschwendet.
Beispiel 2:
Während der Arbeit stieß ich die Seite von Nodejs durch AES, und der Android -Client Java entschlüsselt, dass NodeJS auch den von dem Android -Client verschlüsslungspflichtigen Inhalt entschlüsselt hat, dass die beiden Verschlüsselungsergebnisse unterschiedlich waren. Die Seite muss den Schlüssel Za und MD5 erneut verschlüsseln.
Nodejs:
Die Codekopie lautet wie folgt:
/**
* AES -Verschlüsselung
* @param Daten
* @param SecretKey
*/
EncryPTUTILS.AeSencrypt = Funktion (Daten, SecretKey) {
var cipher = crypto.createcipher ('AES-128-ECB', SecretKey);
return cipher.update (data, 'utf8', 'hex') + cipher.final ('hex');
}
/**
* AES Entschlüsselung
* @param Daten
* @param SecretKey
* @returns {*}
*/
Encryptutils.aesdecrypt = Funktion (Daten, SecretKey) {
var cipher = crypto.CreateCipher ('AES-128-ECB', SecretKey);
return cipher.update (data, 'hex', 'utf8') + cipher.final ('utf8');
}
Java:
Die Codekopie lautet wie folgt:
Paket com.iofamily.util;
Java.Security.Messagedigest importieren;
importieren javax.crypto.cipher;
importieren javax.crypto.spec.secretkeyspec;
/**
* AES -Verschlüsselung, im Einklang mit NodeJs
* @Author Lmiky
* @date 2014-2-25
*/
öffentliche Klasse Aesfornodejs {
public static Final String default_coding = "utf-8";
/**
* Entschlüsselung
* @Author Lmiky
* @date 2014-2-25
* @param verschlüsselt
* @param Saatgut
* @zurückkehren
* @throws Ausnahme
*/
private statische String entschlüsselt (String verschlüsselt, String Seed) löst Ausnahme {aus {
byte [] KeyB = Seed.getBytes (default_coding);
MessagedIGest MD = MessagedIGest.getInstance ("md5");
byte [] thedigest = md.Digest (Schlüsselbetrieb);
Secrykeyspec skey = neuer secrykeyspec (thedigest, "aes");
Cipher dcipher = cipher.getInstance ("aes");
dcipher.init (cipher.decrypt_mode, skey);
byte [] clearbyte = dcipher.dofinal (tobyte (verschlüsselt));
neue Zeichenfolge zurückgeben (Clearbyte);
}
/**
* Verschlüsselung
* @Author Lmiky
* @date 2014-2-25
* @param Inhalt
* @param key
* @zurückkehren
* @throws Ausnahme
*/
öffentliches statisches String -Verschlüsselung (String -Inhalt, String -Schlüssel) löst Ausnahme {aus {
byte [] input = content.getBytes (default_coding);
MessagedIGest MD = MessagedIGest.getInstance ("md5");
byte [] thedigest = md.Digest (key.getBytes (default_coding));
Secrykeyspec sKC = neuer SecretKeyspec (thedigest, "aes");
Cipher Cipher = Cipher.getInstance ("AES/ECB/PKCS5Padding");
cipher.init (cipher.encrypt_mode, SKC);
byte [] ciphERText = new byte [cipher.getOutputSize (input.length)];
int ctLength = cipher.update (Eingabe, 0, input.length, Ciphertext, 0);
ctLength += cipher.dofinal (CiphERText, ctLength);
Return ParseByte2hexstr (CipherText);
}
/**
* String zum Byte -Array
* @Author Lmiky
* @date 2014-2-25
* @param hexstring
* @zurückkehren
*/
privates statisches Byte [] Tobyte (String HexString) {
int len = hexstring.length () / 2;
byte [] result = new byte [len];
für (int i = 0; i <len; i ++) {
Ergebnis [i] = Integer
}
Rückgabeergebnis;
}
/**
* Byte zu Hexadezimalarray
* @Author Lmiky
* @date 2014-2-25
* @param buf
* @zurückkehren
*/
private statische String ParseByte2hexstr (Byte buf []) {
StringBuffer sb = new StringBuffer ();
für (int i = 0; i <buf.length; i ++) {
String hex = Integer.tohexString (BUF [i] & 0xff);
if (hex.length () == 1) {
hex = '0' + hex;
}
sb.Append (hex);
}
return sb.tostring ();
}
public static void main (String [] args) löst Ausnahme {aus {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (Aesfornodejs.Decrypt ("5B8E85B7A86AD15A275A7CB61FE4C0606005E8741F68797718A3E90D74B5092A",:::::::::::::::::::::::::::::::::::::::::::::::::::::: :33:::::::::::::::::::::::::::::::::::::::::::::::: :334fghjnmlkiua ")::::::::::::::::::::::::: :: :::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3or
}
}