Contoh 1:
Hari -hari ini saya bermasalah dengan suatu masalah. Enkripsi AES NodeJs tidak konsisten dengan enkripsi Java dan C#. Tentu saja, ini tidak akan didekripsi. Saya sedang berjuang untuk waktu yang lama: saya masih tidak bisa melakukannya nanti. Dikatakan secara online bahwa implementasi NodeJs AES yang biasa berbeda dari bahasa lain. Ok ~~ mungkin.
Modul Crypto Nodejs.
Salinan kode adalah sebagai berikut:
var crypto = membutuhkan ('crypto');
var data = "156156165152165156156";
console.log ('ClearText asli:' + data);
var algoritma = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
// var cipherencoding = 'hex';
// Jika baris berikutnya tidak dikomentasikan, clearext akhir salah.
var cipherencoding = 'base64';
/*enkripsi*/
var cipher = crypto.createCipher (algoritma, kunci);
var cipherchunks = [];
cipherchunks.push (cipher.update (data, clearencoding, cipherencoding));
cipherchunks.push (cipher.final (cipherencoding));
console.log (cipherencoding + 'ciphertext:' + cipherchunks.join (''));
/*Dekripsi*/
var decipher = crypto.createdecipher (algoritma, kunci);
var poloschunks = [];
untuk (var i = 0; i <cipherchunks.length; i ++) {
Plainchunks.push (decipher.update (cipherchunks [i], cipherencoding, clearencoding));
}
Plainchunks.push (decipher.final (clearencoding));
console.log ("UTF8 Plaintext memutuskan:" + Plainchunks.join (''));
Memang, itu benar ~ ~ enkripsi dan dekripsi berhasil. Tapi itu berbeda dari yang dienkripsi dalam Java dan C#. Tuhan. Saya pikir semua orang berjuang di sini ~~ kan? Bahkan, tambahkan saja vektor dan itu akan konsisten. Ada terlalu sedikit sumber daya yang dicari secara online. Hanya saja saya telah berjuang begitu lama. Oke, kode yang benar adalah:
Salinan kode adalah sebagai berikut:
var crypto = membutuhkan ('crypto');
var data = "156156165152165156156";
console.log ('ClearText asli:' + data);
var algoritma = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
var iv = "";
// var cipherencoding = 'hex';
// Jika baris berikutnya tidak dikomentasikan, clearext akhir salah.
var cipherencoding = 'base64';
var cipher = crypto.createCipheriv (algoritma, kunci, 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 (algoritma, kunci, iv);
var poloschunks = [];
untuk (var i = 0; i <cipherchunks.length; i ++) {
Plainchunks.push (decipher.update (cipherchunks [i], cipherencoding, clearencoding));
}
Plainchunks.push (decipher.final (clearencoding));
console.log ("UTF8 Plaintext memutuskan:" + Plainchunks.join (''));
Secara relatif, ditemukan bahwa enkripsi itu konsisten. Oke, posting ~~~ Aku membencimu, menyia -nyiakan hariku.
Contoh 2:
Selama bekerja, saya menemukan sisi NodeJs yang dienkripsi melalui AES, dan klien Android Java mendekripsi. Sisi perlu mengenkripsi kunci ZA dan MD5.
NodeJs:
Salinan kode adalah sebagai berikut:
/**
* Enkripsi AES
* @param data
* @param Secretkey
*/
encryptutils.aesencrypt = function (data, secretkey) {
var cipher = crypto.createCipher ('AES-128-ECB', Secretkey);
return cipher.update (data, 'utf8', 'hex') + cipher.final ('hex');
}
/**
* Dekripsi AES
* @param data
* @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');
}
Jawa:
Salinan kode adalah sebagai berikut:
paket com.iofamily.util;
impor java.security.messagedigest;
impor javax.crypto.cipher;
impor javax.crypto.spec.secretkeyspec;
/**
* Enkripsi AES, konsisten dengan nodej
* @Author lmiky
* @Date 2014-2-25
*/
kelas publik aesfornodejs {
string final statis publik default_coding = "UTF-8";
/**
* Dekripsi
* @Author lmiky
* @Date 2014-2-25
* @param dienkripsi
* @param seed
* @kembali
* @Throws Exception
*/
Private Static String Decrypt (string dienkripsi, seed string) melempar Exception {
byte [] keyb = seed.getBytes (default_coding);
MessageDigest MD = MessageSmentIgest.getInstance ("md5");
byte [] thedigest = md.digest (keyb);
Secretkeyspec skey = SecretKeyspec baru (Thedigest, "AES");
Cipher dcipher = cipher.getInstance ("aes");
dcipher.init (cipher.decrypt_mode, skey);
byte [] clearbyte = dcipher.dofinal (tobyte (dienkripsi));
mengembalikan string baru (clearbyte);
}
/**
* Enkripsi
* @Author lmiky
* @Date 2014-2-25
* @param konten
* Kunci @param
* @kembali
* @Throws Exception
*/
Public Static String Encrypt (Konten String, Kunci String) Melempar Exception {
byte [] input = content.getBytes (default_coding);
MessageDigest MD = MessageSmentIgest.getInstance ("md5");
byte [] thedigest = md.digest (key.getbytes (default_coding));
SecretKeySpec skc = SecretKeyspec baru (Thedigest, "AES");
Cipher cipher = cipher.getInstance ("aes/ecb/pkcs5padding");
cipher.init (cipher.encrypt_mode, skc);
byte [] cipherText = byte baru [cipher.getoutputsize (input.length)];
int ctlength = cipher.update (input, 0, input.length, ciphertext, 0);
ctlength += cipher.dofinal (ciphertext, ctlength);
return parsebyte2Hexstr (ciphertext);
}
/**
* String ke array byte
* @Author lmiky
* @Date 2014-2-25
* @param hexstring
* @kembali
*/
byte statis pribadi [] tobyte (string hexString) {
int len = hexString.length () / 2;
byte [] hasil = byte baru [len];
untuk (int i = 0; i <len; i ++) {
Hasil [i] = integer.valueof (hexString.substring (2 * i, 2 * i + 2), 16) .bytevalue ();
}
hasil pengembalian;
}
/**
* Byte ke hexadecimal array
* @Author lmiky
* @Date 2014-2-25
* @param buf
* @kembali
*/
Private Static String parsebyte2Hexstr (byte buf []) {
StringBuffer SB = StringBuffer baru ();
untuk (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) melempar pengecualian {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (aesfornodejs.decrypt ("5B8E85B7A86AD15A275A7CB61FE4C0606005E8741F68797718A3E90D74B5092A", "1234FGHNMLE90D74B5092A" :::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::
}
}