مثال 1:
في هذه الأيام ، شعرت بالقلق من مشكلة. لا يتماشى تشفير Nodejs 'AES مع تشفير Java و C#. بالطبع ، لن يتم فك تشفير هذا. كنت أكافح لفترة طويلة: ما زلت لا أستطيع القيام بذلك لاحقًا. يقال عبر الإنترنت أن تطبيق Nodejs AES المعتاد يختلف عن اللغات الأخرى. موافق ~~ ربما.
Nodejs Crypto Module.
نسخة الكود كما يلي:
var crypto = require ('crypto') ؛
var data = "156156165152165156156" ؛
console.log ('Original ClearText:' + data) ؛
VAR خوارزمية = 'AES-128-ECB' ؛
var key = '78541561566' ؛
var clearencoding = 'utf8' ؛
// var cipherencoding = 'hex' ؛
// إذا كان السطر التالي غير معتمد ، فإن Clear Extrect هو خطأ.
var cipherencoding = 'base64' ؛
/*التشفير*/
var cipher = crypto.createcipher (الخوارزمية ، المفتاح) ؛
var cipherchunks = [] ؛
cipherchunks.push (cipher.update (البيانات ، clearencoding ، cipherencoding)) ؛
cipherchunks.push (cipher.final (cipherencoding)) ؛
console.log (cipherencoding + 'ciphertext:' + cipherchunks.join ('')) ؛
/*فك التشفير*/
var decipher = crypto.createdEcipher (الخوارزمية ، المفتاح) ؛
var plainchunks = [] ؛
لـ (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 خوارزمية = 'AES-128-ECB' ؛
var key = '78541561566' ؛
var clearencoding = 'utf8' ؛
var iv = "" ؛
// var cipherencoding = 'hex' ؛
// إذا كان السطر التالي غير معتمد ، فإن Clear Extrect هو خطأ.
var cipherencoding = 'base64' ؛
var cipher = crypto.createcipheriv (الخوارزمية ، المفتاح ، الرابع) ؛
var cipherchunks = [] ؛
cipherchunks.push (cipher.update (البيانات ، clearencoding ، cipherencoding)) ؛
cipherchunks.push (cipher.final (cipherencoding)) ؛
console.log (cipherencoding + 'ciphertext:' + cipherchunks.join ('')) ؛
var decipher = crypto.createdEcipheriv (الخوارزمية ، المفتاح ، الرابع) ؛
var plainchunks = [] ؛
لـ (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 من خلال AES ، وتفكك عميل Android Java. يحتاج الجانب إلى تشفير مفتاح ZA و MD5 مرة أخرى.
Nodejs:
نسخة الكود كما يلي:
/**
* تشفير AES
* param بيانات
* param secretkey
*/
EncryptuTils.aesencrypt = function (البيانات ، secretkey) {
var cipher = crypto.createcipher ('AES-128-ECB' ، SecretKey) ؛
إرجاع cipher.update (البيانات ، "utf8" ، 'hex') + cipher.final ('hex') ؛
}
/**
* AES Decryption
* param بيانات
* param secretkey
* returns {*}
*/
EncryptuTils.aesDecrypt = function (data ، secretkey) {
var cipher = crypto.createdecipher ('AES-128-ECB' ، SecretKey) ؛
إرجاع cipher.update (البيانات ، 'hex' ، 'utf8') + cipher.final ('utf8') ؛
}
جافا:
نسخة الكود كما يلي:
حزمة com.iofamily.util ؛
استيراد java.security.messagedigest ؛
استيراد javax.crypto.cipher ؛
استيراد javax.crypto.spec.secretkeyspec ؛
/**
* تشفير AES ، بما يتوافق مع Nodejs
* Author Lmiky
* date 2014-2-25
*/
الطبقة العامة aesfornodejs {
السلسلة النهائية الثابتة العامة default_coding = "utf-8" ؛
/**
* فك التشفير
* Author Lmiky
* date 2014-2-25
* param مشفرة
* param بذرة
* @يعود
* throws استثناء
*/
سلسلة ثابتة خاصة decrypt (سلسلة مشفرة ، بذرة السلسلة) ترمي استثناء {
byte [] keyb = seed.getBytes (default_coding) ؛
messagedigest md = messagedigest.getInstance ("MD5") ؛
byte [] thedigest = md.digest (keyb) ؛
SecretKeySpec skey = new 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 المحتوى
* مفتاح param
* @يعود
* throws استثناء
*/
تشفير السلسلة الثابتة العامة (محتوى السلسلة ، مفتاح السلسلة) إلقاء الاستثناء {
byte [] input = content.getBytes (default_coding) ؛
messagedigest md = messagedigest.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 (الإدخال ، 0 ، input.length ، ciphertext ، 0) ؛
ctlength += cipher.dofinal (ciphertext ، ctlength) ؛
إرجاع Parsebyte2Hexstr (النص المشفر) ؛
}
/**
* سلسلة إلى صفيف البايت
* Author Lmiky
* date 2014-2-25
* param hexstring
* @يعود
*/
بايت ثابت خاص [] توبي (سلسلة 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 (بايت بوف []) {
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 () ؛
}
الفراغ الثابت العام (سلسلة [] args) يلقي الاستثناء {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (Aesfornodejs.Decrypt ("5B8E85B7A86AD15A275A7CB61FE4C0606005E8741F6879718A3E90D74B5092A" ، "1234fghjnmlkiuha" :::::::: ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::::::::::::::: :::::::::::::::::::::::::
}
}