首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js密码不适用于其他密码者的密码文本

Node.js密码不适用于其他密码者的密码文本
EN

Stack Overflow用户
提问于 2015-04-23 19:17:15
回答 1查看 408关注 0票数 3

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

代码语言:javascript
复制
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);
        }
    }

}

我需要使用PwdCipher类解密文本(用类Node.js加密),但当我使用以下代码时:

代码语言:javascript
复制
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;
};

以下是例外情况:

代码语言:javascript
复制
> 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)

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 12:49:47

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29832434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档