Exemplo 1:
Hoje em dia, fiquei perturbado por um problema. A criptografia AES dos Nodejs é inconsistente com a criptografia Java e C#. Claro, isso não será descriptografado. Eu estava lutando por um longo tempo: ainda não podia fazer isso mais tarde. Dizem on -line que a implementação usual do NodeJS AES é diferente de outros idiomas. Ok ~~ talvez.
Módulo NodeJS Crypto.
A cópia do código é a seguinte:
var cripto = requer ('cripto');
var data = "156156165152165156156";
console.log ('ClearText original:' + dados);
var algoritmo = 'AES-128-ECB';
var key = '78541561566';
var clearEncoding = 'utf8';
// var cipherencoding = 'hex';
// Se a próxima linha não for obrigada, o ClearExt final está errado.
var cipherencoding = 'base64';
/*Criptografia*/
var cipher = cripto.createcipher (algoritmo, chave);
var cipherchunks = [];
cipherchunks.push (cifra.Update (dados, clearEncoding, cipherencoding));
cipherchunks.push (cifra.Final (cipherencoding));
console.log (cipherencoding + 'cipherText:' + cipherchunks.join (''));
/*Decripção*/
var decipher = cripto.createCipher (algoritmo, chave);
var planychunks = [];
for (var i = 0; i <cipherchunks.length; i ++) {
PlainChunks.push (decipher.update (cipherchunks [i], cipherencoding, clarencoding));
}
PlainChunks.push (decipher.Final (ClearEncoding));
console.log ("UTF8 PLAYTEXT decidido:" + PlainChunks.join (''));
De fato, isso mesmo ~~ Criptografia e descriptografia são bem -sucedidas. Mas é diferente daqueles criptografados em Java e C#. Deus. Eu acho que todo mundo está lutando aqui ~~ certo? De fato, basta adicionar um vetor e ele será consistente. Existem poucos recursos pesquisados online. É que eu tenho lutado há tanto tempo. OK, o código correto é:
A cópia do código é a seguinte:
var cripto = requer ('cripto');
var data = "156156165152165156156";
console.log ('ClearText original:' + dados);
var algoritmo = 'AES-128-ECB';
var key = '78541561566';
var clearEncoding = 'utf8';
var iv = "";
// var cipherencoding = 'hex';
// Se a próxima linha não for obrigada, o ClearExt final está errado.
var cipherencoding = 'base64';
var cipher = cripto.createcipheriv (algoritmo, chave, iv);
var cipherchunks = [];
cipherchunks.push (cifra.Update (dados, clearEncoding, cipherencoding));
cipherchunks.push (cifra.Final (cipherencoding));
console.log (cipherencoding + 'cipherText:' + cipherchunks.join (''));
var decipher = cripto.createCipheriv (algoritmo, chave, iv);
var planychunks = [];
for (var i = 0; i <cipherchunks.length; i ++) {
PlainChunks.push (decipher.update (cipherchunks [i], cipherencoding, clarencoding));
}
PlainChunks.push (decipher.Final (ClearEncoding));
console.log ("UTF8 PLAYTEXT decidido:" + PlainChunks.join (''));
Comparativamente, verificou -se que a criptografia era consistente. Ok, post ~~~ eu te odeio, desperdicei meu dia.
Exemplo 2:
Durante o trabalho, encontrei o lateral do NodeJS criptografado através do AES, e o cliente Android Java descriptografado. O lado precisa criptografar a chave ZA e MD5.
Nodejs:
A cópia do código é a seguinte:
/**
* Criptografia AES
* Dados @param
* @param secretKey
*/
Encryptutils.aeSencrypt = function (dados, secretKey) {
var cipher = cripto.createcipher ('AES-128-ECB', SecretKey);
Retorne cipher.update (dados, 'utf8', 'hex') + cipher.final ('hex');
}
/**
* AES Decripção
* Dados @param
* @param secretKey
* @returns {*}
*/
Encryptutils.aesDecrypt = function (Data, SecretKey) {
var cipher = Crypto.createCipher ('AES-128-ECB', SecretKey);
Retornar Cipher.Update (Data, 'Hex', 'Utf8') + cipher.Final ('UTF8');
}
Java:
A cópia do código é a seguinte:
pacote com.iofamily.util;
importar java.Security.Messagedigest;
importar javax.crypto.cipher;
importar javax.crypto.spec.secretkeyspec;
/**
* Criptografia AES, consistente com NodeJs
* @author lmiky
* @Date 2014-2-25
*/
classe pública aesfornodejs {
public static final string default_coding = "utf-8";
/**
* Decripção
* @author lmiky
* @Date 2014-2-25
* @param criptografado
* @param semente
* @retornar
* @Throws Exception
*/
String estática privada descriptografar (string criptografada, semente de string) lança exceção {
byte [] keyb = SEED.GetBytes (default_coding);
Messagedigest md = Messagedigest.getInstance ("md5");
byte [] thedigest = md.digest (keyb);
Secretkeyspec skey = novo secretKeyspec (thedigest, "aes");
Cifra dcipher = cipher.getInstance ("aes");
dcipher.init (cipher.decrypt_mode, skey);
byte [] clearbyte = dcipher.dofinal (Tobyte (criptografado));
return New String (ClearByte);
}
/**
* Criptografia
* @author lmiky
* @Date 2014-2-25
* @param conteúdo
* @param chave
* @retornar
* @Throws Exception
*/
public static string criprypt (conteúdo da string, chave de string) lança a exceção {
byte [] input = content.getBytes (default_coding);
Messagedigest md = Messagedigest.getInstance ("md5");
byte [] thedigest = md.digest (key.getBytes (default_coding));
SecretKeyspec skc = novo secretKeyspec (thedigest, "aes");
Cifra cifra = cipher.getInstance ("AES/ECB/PKCS5Padding");
cipher.init (cipher.encrypt_mode, skc);
byte [] ciphertext = new byte [cipher.getOutputSize (input.length)];
int ctLength = cipher.update (entrada, 0, input.length, ciphertext, 0);
ctLength += cipher.Dofinal (CipherText, ctLength);
retornar parsebyte2hexstr (CipherText);
}
/**
* String to Byte Array
* @author lmiky
* @Date 2014-2-25
* @param hexstring
* @retornar
*/
Byte estático privado [] Tobyte (String Hexstring) {
int len = hexstring.length () / 2;
byte [] resultado = novo byte [len];
para (int i = 0; i <len; i ++) {
resultado [i] = Integer.ValueOf (hexstring.substring (2 * i, 2 * i + 2), 16) .bytevalue ();
}
resultado de retorno;
}
/**
* Byte para Array Hexadecimal
* @author lmiky
* @Date 2014-2-25
* @param buf
* @retornar
*/
parsebyte2hexstr privado (byte buf []) {
StringBuffer sb = new StringBuffer ();
for (int i = 0; i <buf.length; i ++) {
String hex = integer.tohexString (buf [i] e 0xff);
if (hex.length () == 1) {
Hex = '0' + hexadecimal;
}
sb.append (hex);
}
return sb.toString ();
}
public static void main (string [] args) lança exceção {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (aesfornodejs.decrypt ("5b8e85b7a86ad15a275a7cb61fe4c0606005e8741f68797718a3e90d74b5092a ::::::::: : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : ::::::::::::::::::::::Here ::::::::::::::::::here
}
}