Пример 1:
В эти дни я был обеспокоен проблемой. Шифрование Nodejs 'AES не соответствует шифрованию Java и C#. Конечно, это не будет расшифровано. Я долго боролся: я все еще не мог сделать это позже. Говорят в Интернете, что обычная реализация Nodejs AES отличается от других языков. ОК ~~ Может быть.
Nodejs Crypto Module.
Кода -копия выглядит следующим образом:
var crypto = require ('crypto');
VAR DATA = "156156165152165156156";
console.log ('Original ClearText:' + data);
var algorithm = 'aes-128-ecb';
var key = '78541561566';
var clearencoding = 'utf8';
// var cipherencoding = 'hex';
// Если следующая строка неуместна, окончательный Clearext неверен.
var cipherencoding = 'base64';
/*шифрование*/
var cipher = crypto.createcipher (алгоритм, ключ);
var cipherchunks = [];
cipherchunks.push (cipher.update (data, clearencoding, cipherencoding));
cipherchunks.push (cipher.final (cipherencoding));
console.log (cipherencoding + 'ciphertext:' + cipherchunks.join ('' '));
/*Дешифрование*/
var decipher = crypto.createdecipher (алгоритм, ключ);
var plainchunks = [];
for (var i = 0; i <cipherchunks.length; i ++) {
plainchunks.push (decipher.update (cipherchunks [i], cipherencoding, clearencoding));
}
plainchunks.push (decipher.final (clearencoding));
console.log ("UTF8 Plaintext решил:" + plainchunks.join (''));
Действительно, это верно ~~ Шифрование и дешифрование успешны. Но это отличается от тех, которые зашифрованы в Java и C#. Бог. Я думаю, что все здесь борются ~~, верно? На самом деле, просто добавьте вектор, и он будет последовательным. Слишком мало ресурсов, ищренных в Интернете. Просто я так долго боролся. Хорошо, правильный код:
Кода -копия выглядит следующим образом:
var crypto = require ('crypto');
VAR DATA = "156156165152165156156";
console.log ('Original ClearText:' + data);
var algorithm = 'aes-128-ecb';
var key = '78541561566';
var clearencoding = 'utf8';
var iv = "";
// var cipherencoding = 'hex';
// Если следующая строка неуместна, окончательный Clearext неверен.
var cipherencoding = 'base64';
var cipher = crypto.createcipheriv (алгоритм, ключ, iv);
var cipherchunks = [];
cipherchunks.push (cipher.update (data, clearencoding, cipherencoding));
cipherchunks.push (cipher.final (cipherencoding));
console.log (cipherencoding + 'ciphertext:' + cipherchunks.join ('' '));
var decipher = crypto.createdecipheriv (алгоритм, ключ, iv);
var plainchunks = [];
for (var i = 0; i <cipherchunks.length; i ++) {
plainchunks.push (decipher.update (cipherchunks [i], cipherencoding, clearencoding));
}
plainchunks.push (decipher.final (clearencoding));
console.log ("UTF8 Plaintext решил:" + plainchunks.join (''));
Для сравнения было обнаружено, что шифрование было последовательным. ОК, пост ~~~ Я ненавижу тебя, потратил впустую мой день.
Пример 2:
Во время работы я столкнулся с боковым заводом Nodejs, и Java Decrypt Client Android я согласился, что Nodejs также необходимо расшифровать контент, шифруемый клиентом Android. Сторона должна шифровать Key ZA и MD5.
Nodejs:
Кода -копия выглядит следующим образом:
/**
* АЭС шифрование
* @param данные
* @param secretkey
*/
Encryptutils.aesencrypt = function (data, secretkey) {
var cipher = crypto.createcipher ('aes-128-ecb', secretkey);
return cipher.update (data, 'utf8', 'hex') + cipher.final ('hex');
}
/**
* DES Decryption
* @param данные
* @param secretkey
* @returns {*}
*/
encryptutils.aesdecrypt = function (data, secretkey) {
var cipher = crypto.createdecipher ('aes-128-ecb', secretkey);
return cipher.update (data, 'hex', 'utf8') + cipher.final ('utf8');
}
Java:
Кода -копия выглядит следующим образом:
пакет com.iofamily.util;
Импорт java.security.messagedigest;
Импорт javax.crypto.cipher;
Импорт javax.crypto.spec.secretkeyspec;
/**
* Шифрование AES, в соответствии с Nodejs
* @author lmiky
* @Date 2014-2-25
*/
открытый класс Aesfornodejs {
public Static Final String default_coding = "UTF-8";
/**
* Дешифрование
* @author lmiky
* @Date 2014-2-25
* @param зашифровано
* @param Seed
* @возвращаться
* @ThrohS Exception
*/
Приватная статическая строка Decrypt (String Encrypted, String Seed) бросает исключение {
byte [] keyb = seed.getbytes (default_coding);
MessageDigest MD = MOSSAGEDIGEST.GETINSTANCE ("MD5");
byte [] thedigest = md.digest (keyb);
SecretKeySpec Skey = новый SecretKeySpec (TheDigest, "AES");
Cipher dcipher = cipher.getinstance ("aes");
dcipher.init (cipher.decrypt_mode, skey);
byte [] clearbyte = dcipher.dofinal (tobyte (зашифровано));
вернуть новую строку (clearbyte);
}
/**
* Шифрование
* @author lmiky
* @Date 2014-2-25
* @param content
* @param Key
* @возвращаться
* @ThrohS Exception
*/
Public Static String Encrypt (String Content, String Key) Throws Exception {
byte [] input = content.getbytes (default_coding);
MessageDigest MD = MOSSAGEDIGEST.GETINSTANCE ("MD5");
byte [] thedigest = md.digest (key.getbytes (default_coding));
SecretKeySpec skc = new 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 (input, 0, input.length, ciphertext, 0);
ctlength += cipher.dofinal (ciphertext, ctlength);
вернуть Parsebyte2Hexstr (CipherText);
}
/**
* Строка в байт массив
* @author lmiky
* @Date 2014-2-25
* @param hexstring
* @возвращаться
*/
Частный статический байт [] tobyte (String hexstring) {
int len = hexstring.length () / 2;
byte [] result = new Byte [len];
для (int i = 0; i <len; i ++) {
Результат [i] = integer.valueof (hexstring.substring (2 * i, 2 * i + 2), 16) .bytevalue ();
}
результат возврата;
}
/**
* Байт в шестнадцатеричный массив
* @author lmiky
* @Date 2014-2-25
* @param buf
* @возвращаться
*/
Частная статическая строка Parsebyte2Hexstr (Byte buf []) {
StringBuffer sb = new StringBuffer ();
для (int i = 0; i <buf.length; i ++) {
String hex = integer.tohexstring (buf [i] & 0xff);
if (hex.length () == 1) {
hex = '0' + hex;
}
SB.Append (Hex);
}
вернуть sb.toString ();
}
public static void main (string [] args) бросает исключение {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (aesfornodejs.decrypt ("5b8e85b7a86ad15a275a7cb61fe4c0606005e8741f68797718a3e90d74b5092a",:: :: :: :: :: :: :: :: :: ::: ::: :::::::: ::::::::::::::::: ::::::::::::::::::
}
}