Example 1:
요즘 나는 문제로 어려움을 겪었습니다. Nodejs의 AES 암호화는 Java 및 C# 암호화와 일치하지 않습니다. 물론 이것은 해독되지 않습니다. 나는 오랫동안 고군분투하고 있었다 : 나는 여전히 소스 코드를 보았다. 온라인으로 일반적인 Nodejs AES 구현은 다른 언어와 다르다고합니다. 좋아 ~~ 어쩌면.
nodejs 암호화 모듈.
코드 사본은 다음과 같습니다.
var crypto = 요구 ( 'crypto');
var data = "15615616515165156156";
console.log ( 'Original Cleartext :' + data);
var 알고리즘 = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
// var cipherencoding = 'hex';
// 다음 줄이 무책임하면 최종 클리어 텍스트가 잘못되었습니다.
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], 암호화, Clearencoding));
}
PlainChunks.push (Decipher.Final (ClearenCoding));
Console.log ( "UTF8 PlainText DOST :" + PlainChunks.join ( ''));
실제로, 그것은 ~~ 암호화와 암호 해독이 성공적입니다. 그러나 Java 및 C#에서 암호화 된 것과 다릅니다. 하나님. 모두가 여기서 어려움을 겪고있는 것 같아요 ~~ 맞죠? 실제로 벡터를 추가하면 일관되게됩니다. 온라인으로 검색 된 리소스가 너무 적습니다. 내가 오랫동안 고군분투 해 왔습니다. 좋아, 올바른 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var crypto = 요구 ( 'crypto');
var data = "15615616515165156156";
console.log ( 'Original Cleartext :' + data);
var 알고리즘 = 'AES-128-ECB';
var key = '78541561566';
var clearencoding = 'utf8';
var iv = "";
// var cipherencoding = 'hex';
// 다음 줄이 무책임하면 최종 클리어 텍스트가 잘못되었습니다.
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], 암호화, Clearencoding));
}
PlainChunks.push (Decipher.Final (ClearenCoding));
Console.log ( "UTF8 PlainText DOST :" + PlainChunks.join ( ''));
비교적, 암호화가 일관되었다는 것이 밝혀졌습니다. 좋아, 포스트 ~~~ 나는 당신을 싫어하고, 내 하루를 낭비했습니다.
Example 2:
작업 중에 AES를 통해 Nodejs의 측면을 암호화했으며 Android 클라이언트는 Android 클라이언트가 암호화 한 콘텐츠를 해독해야합니다 측면은 Key ZA 및 MD5를 다시 암호화해야합니다. 다음은 AES ECB 암호화의 내용입니다.
nodejs :
코드 사본은 다음과 같습니다.
/**
* AES 암호화
* @param 데이터
* @Param Secretkey
*/
Encryptutils.aesencrypt = function (data, secretkey) {
var cipher = crypto.createcipher ( 'AES-128-ECB', SecretKey);
cipher.update (data, 'utf8', 'hex') + cipher.final ( 'hex');
}
/**
* AES 암호 해독
* @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.messagegegest;
javax.crypto.cipher 가져 오기;
javax.crypto.spec.secretkeyspec import;
/**
* nodejs와 일치하는 AES 암호화
* @author lmiky
* @Date 2014-2-25
*/
공개 클래스 aesfornodejs {
공개 정적 최종 문자열 default_coding = "utf-8";
/**
* 암호 해독
* @author lmiky
* @Date 2014-2-25
* @param 암호화
* @param 씨앗
* @반품
* @throws 예외
*/
개인 정적 문자열 decrypt (문자열 암호화, 문자열 시드) 예외 {
바이트 [] keyb = seed.getBytes (default_coding);
MessageDigest MD = MessageDigest.getInstance ( "MD5");
바이트 [] 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 예외
*/
public static string alcrypt (문자열 내용, 문자열 키)는 예외 {{
바이트 [] input = content.getBytes (default_coding);
MessageDigest MD = MessageDigest.getInstance ( "MD5");
바이트 [] thedigest = md.digest (key.getBytes (default_coding));
Secretkeyspec SKC = 새로운 SecretKeyspec (TheDigest, "aes");
Cipher Cipher = Cipher.getInstance ( "AES/ECB/PKCS5PADDING");
cipher.init (cipher.encrypt_mode, skc);
바이트 [] ciphertext = new Byte [cipher.getoutputsize (input.length)];
int ctlength = cipher.update (입력, 0, input.length, ciphertext, 0);
ctlength += cipher.dofinal (ciphertext, ctlength);
ParseByTe2Hexstr (CipherText)를 반환합니다.
}
/**
* 바이트 배열에서 문자열
* @author lmiky
* @Date 2014-2-25
* @param hexstring
* @반품
*/
개인 정적 바이트 [] 토비 테 (String hexstring) {
int len = hexstring.length () / 2;
바이트 [] 결과 = 새로운 바이트 [Len];
for (int i = 0; i <len; i ++) {
결과 [i] = integer.valueof (hexstring.substring (2 * i, 2 * i + 2), 16) .ByteValue ();
}
반환 결과;
}
/**
* 바이트에서 16 진수 배열
* @author lmiky
* @Date 2014-2-25
* @param buf
* @반품
*/
개인 정적 문자열 parsebyte2Hexstr (byte buf []) {
StringBuffer sb = new StringBuffer ();
for (int i = 0; i <buf.length; i ++) {
문자열 hex = integer.toHexString (buf [i] & 0xff);
if (hex.length () == 1) {
16 진수 = '0' + 16 진;
}
sb.append (16 진);
}
반환 sb.toString ();
}
public static void main (string [] args)은 예외 {
System.out.println(AESForNodejs.encrypt("fsadfsdafsdafsdafsdafsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadfsadf
System.out.println (aesfornodejs.decrypt : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
}
}