Java与Node.js利用AES加密解密出相同结果的方法示例
前言
工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下是Java与Node.js利用AES加密解密出相同结果的方法,需要的朋友们下面来一起学习学习吧。
JAVA代码如下:
packageg.g; importjava.security.MessageDigest; importjavax.crypto.Cipher; importjavax.crypto.spec.SecretKeySpec; publicclassAesECB{ publicstaticfinalStringDEFAULT_CODING="utf-8"; /** *解密 *@authorlmiky *@date2014-2-25 *@paramencrypted *@paramseed *@return *@throwsException */ privatestaticStringdecrypt(Stringencrypted,Stringseed)throwsException{ byte[]keyb=seed.getBytes(DEFAULT_CODING); MessageDigestmd=MessageDigest.getInstance("MD5"); byte[]thedigest=md.digest(keyb); SecretKeySpecskey=newSecretKeySpec(thedigest,"AES"); Cipherdcipher=Cipher.getInstance("AES"); dcipher.init(Cipher.DECRYPT_MODE,skey); byte[]clearbyte=dcipher.doFinal(toByte(encrypted)); returnnewString(clearbyte); } /** *加密 *@authorlmiky *@date2014-2-25 *@paramcontent *@paramkey *@return *@throwsException */ publicstaticStringencrypt(Stringcontent,Stringkey)throwsException{ byte[]input=content.getBytes(DEFAULT_CODING); MessageDigestmd=MessageDigest.getInstance("MD5"); byte[]thedigest=md.digest(key.getBytes(DEFAULT_CODING)); SecretKeySpecskc=newSecretKeySpec(thedigest,"AES"); Ciphercipher=Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE,skc); byte[]cipherText=newbyte[cipher.getOutputSize(input.length)]; intctLength=cipher.update(input,0,input.length,cipherText,0); ctLength+=cipher.doFinal(cipherText,ctLength); returnparseByte2HexStr(cipherText); } /** *字符串转字节数组 *@authorlmiky *@date2014-2-25 *@paramhexString *@return */ privatestaticbyte[]toByte(StringhexString){ intlen=hexString.length()/2; byte[]result=newbyte[len]; for(inti=0;i<len;i++){ result[i]=Integer.valueOf(hexString.substring(2*i,2*i+2),16).byteValue(); } returnresult; } /** *字节转16进制数组 *@authorlmiky *@date2014-2-25 *@parambuf *@return */ privatestaticStringparseByte2HexStr(bytebuf[]){ StringBuffersb=newStringBuffer(); for(inti=0;i<buf.length;i++){ Stringhex=Integer.toHexString(buf[i]&0xFF); if(hex.length()==1){ hex='0'+hex; } sb.append(hex); } returnsb.toString(); } publicstaticvoidmain(String[]args)throwsException{ System.out.println(AesECB.encrypt("fsadfsdafsdafsdafsadfsadfsadf","1eVRiqy7b9Uv7ZMM")); System.out.println(AesECB.decrypt("b123e2d9199598c0e3f1999dc9e723387b68e29d2b3a0d59fc7d5946c750c6b4","1eVRiqy7b9Uv7ZMM")); } }
Node.js代码如下:
varcrypto=require('crypto'); exports.aes_algorithm="aes-128-ecb"; exports.aes_secrect="1eVRiqy7b9Uv7ZMM"; exports.encrypt=function(text){ varcipher=crypto.createCipher(this.aes_algorithm,this.aes_secrect) varcrypted=cipher.update(text,'utf8','hex') crypted+=cipher.final('hex'); returncrypted; }; exports.decrypt=function(text){ vardecipher=crypto.createDecipher(this.aes_algorithm,this.aes_secrect) vardec=decipher.update(text,'hex','utf8') dec+=decipher.final('utf8'); returndec; }; //varhw=this.encrypt("fsadfsdafsdafsdafsadfsadfsadf"); //console.log(hw); //console.log(this.decrypt(hw));
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。