Node.js解密不适用于其他密码的密文

我使用javax.crypto.Cipher org.apache.commons.codec.binary.Base64创build密文,并使用Java,如下所示:

import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class PwdCipher { private static final Logger LOG = LoggerFactory.getLogger(PwdCipher.class); private static final int BASE64_ARG0 = 32; private static final String SECRET = "tvnw63ufg9gh5392"; private static byte[] linebreak = {}; private static SecretKey key; private static Cipher cipher; private static Base64 coder; static { key = new SecretKeySpec(SECRET.getBytes(), "AES"); try { cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE"); } catch (NoSuchAlgorithmException | NoSuchProviderException | NoSuchPaddingException e) { LOG.debug("Erro ao criar encriptador.", e); } coder = new Base64(BASE64_ARG0, linebreak, true); } private PwdCipher(){ } public static synchronized String encrypt(String plainText) { try { cipher.init(Cipher.ENCRYPT_MODE, key); byte[] cipherText = cipher.doFinal(plainText.getBytes()); return new String(coder.encode(cipherText)); } catch (Exception e) { throw new GdocException("Erro ao encriptar senha.", e); } } public static synchronized String decrypt(String codedText) { try { byte[] encypted = coder.decode(codedText.getBytes()); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decrypted = cipher.doFinal(encypted); return new String(decrypted); } catch (Exception e) { throw new GdocException("Erro ao decriptar senha.", e); } } } 

我需要使用Node.js解密文本(用类PwdCipherencryption),但是当我使用下面的代码:

 exports.decryptLdapPassword = function(password){ var key = 'tvnw63ufg9gh5392'; var ciphertext = password; var crypto = require('crypto'); var decipher = crypto.createDecipher('aes-128-ecb', key); var decrypted = decipher.update(ciphertext, 'base64', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; }; 

原来以下例外:

 > crypto.js:323 var ret = this._binding.final(); > ^ TypeError: error:00000000:lib(0):func(0):reason(0) > at Decipher.Cipher.final (crypto.js:323:27) > at Object.exports.decryptLdapPassword (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\server\api\service\service.util.js:14:25) > at Promise.<anonymous> (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\server\api\service\service.controller.js:111:34) > at Promise.<anonymous> (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\node_modules\mongoose\node_modules\mpromise\lib\promise.js:177:8) > at Promise.emit (events.js:95:17) > at Promise.emit (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\node_modules\mongoose\node_modules\mpromise\lib\promise.js:84:38) > at Promise.fulfill (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\node_modules\mongoose\node_modules\mpromise\lib\promise.js:97:20) > at Promise.resolve (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\node_modules\mongoose\lib\promise.js:114:23) > at Promise.<anonymous> (C:\ProjetosTFS\GDOC\fSuporte\GDoc\Versionado\Fontes\woodstock\node_modules\mongoose\node_modules\mpromise\lib\promise.js:177:8) > at Promise.emit (events.js:95:17) 

任何想法?

Interesting Posts