解密AES 256 CBC javascript

时间:2016-01-29 02:09:51

标签: javascript java angularjs api encryption

我是一名新手角色前端开发人员,现在我需要访问其他开发团队的Java spring REST api。

为了获得api http://apps.api.com/api/user/login,我需要使用标题发送该请求:AuthorizationBearer b517241b-e81d-430e-afb6-773527989b47Content-Typeapplication/json

要获取令牌b517241b-e81d-430e-afb6-773527989b47,我必须请求另一个api http://apps.api.com/api/auth/token,然后我从该api获得的结果如下:

{ "token": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NTQwMzI5MDk2NzYsInN1YiI6InRva2VuIiwidG9rZW4iOiIrbjZEd1NDUGVMbXd0SGpCT2ZzZUhVRlwvS2NOMzBBTDRkXC9sWDlSVlI1UWxnXC9wV2M1VVNNREpCVDVSUnNWNHpadUFtNExWc3BIeDl1SmtESGhvZTI0dWhMcUNzeUFmZklYMTBkalVqVzFnOSt5QTN4eEg4TElQbzBoTDR5V0JhNnplWm9lVFcrZFE0dzd3MVhCazhLZFZwWGFmRmJMZ3RoXC9OdVE5REM1c3QxTllnSDB2aHRWZ0lha3VnZVlhOEFPU1c3eWVsOWFHcXhJN1hHM1FrbVwvYUE9PSIsImlzcyI6Imh0dHBzOlwvXC93d3cud2luZ21vbmV5LmNvbSJ9.uBQYvfTwadTG2QZ76tQN6-ETT1M8X72ltDe7xBCvEhA" }

我需要做的是,使用jwt解码该令牌,然后使用AES 256 CBC解密它(我被困在这里)。

我从后端开发人员那里获得了解密代码,代码在java中:

private static final String AES_KEY = "HG47YZ3CR8";
public static String decrypt(String orignalText) throws ApplicationException {

    try {
        final MessageDigest md = MessageDigest.getInstance("SHA-256");
        final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8"));
        final SecretKey key = new SecretKeySpec(digestOfPassword, "AES");

        final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16]));
        final byte[] plainTextBytes = Base64.decodeBase64(orignalText);
        final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);

        return new String(encodeTextBytes);

    } catch (NoSuchAlgorithmException |
            UnsupportedEncodingException |
            IllegalBlockSizeException |
            InvalidKeyException |
            BadPaddingException |
            NoSuchPaddingException | InvalidAlgorithmParameterException e) {
        throw new ApplicationException(ErrorCode.GENERAL_FAIL, e);
    }
}

我一直在尝试搜索javascript库来编写与java代码相同的解密,但我找不到合适的解密。

如果有人知道哪个javascript库与这个java代码类似,我感激不尽。

1 个答案:

答案 0 :(得分:0)

我不确定我是否真的建议使用你的前端解密任何东西,因为这需要你的密钥在javascript库中,这实际上允许每个人解密你的令牌。哪个会问你为什么要加密开始。但如果您真的需要在javascript中执行此操作,则可以查看SO答案here