有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

节点。JSJavaScript等价于JavaAES+SecretKeySpec解密

下面是我的java代码,我正试图转移到NodeJS

public static String decryptDataWithKey(String keyString, String base64String) throws Exception {

        //Algorithm
        String AES_ALGORITHM = "AES"; 

        //Key from keystring
        MessageDigest digester = MessageDigest.getInstance("MD5");
        digester.update(keyString.getBytes());
        byte[] password = digester.digest();
        Key key =  new SecretKeySpec(password, AES_ALGORITHM); // what is the equivalent of this line in javascript ?

        //Create decipher
        Cipher c = Cipher.getInstance(AES_ALGORITHM);
        c.init(Cipher.DECRYPT_MODE, key);

        //Get bytes of enc data
        byte[] decodedValue = new BASE64Decoder().decodeBuffer(base64String);

        // Do decrypt
        byte[] decValue = c.doFinal(decodedValue);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }

我最后写了下面的方法,但得到了异常——糟糕的解密

function decryptDataWithKey(keyString, base64String){

        //Algorithm
        let algorithm = 'aes-128-ecb';

        //Key from keystring
        let key = crypto.createHash('md5').update(keyString).digest();

        //Create decipher
        let decipher = crypto.createDecipher(algorithm,key);

        //Get bytes of enc data
        let cipher = new Buffer(base64String, 'base64');

        // Do decrypt
        let decrypted = decipher.update(cipher, 'base64', 'utf-8');
        decrypted += decipher.final('utf-8'); // throwing exception : digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
        return decrypted;
    }

请引导我这里缺少什么。我试图在我的nodejs项目中避免jar依赖。我相信这应该可以通过加密实现。 还是我应该选择crypto js


共 (0) 个答案