我是一名新手角色前端开发人员,现在我需要访问其他开发团队的Java spring REST api。
为了获得api http://apps.api.com/api/user/login
,我需要使用标题发送该请求:Authorization
:Bearer b517241b-e81d-430e-afb6-773527989b47
和Content-Type
:application/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代码类似,我感激不尽。
答案 0 :(得分:0)
我不确定我是否真的建议使用你的前端解密任何东西,因为这需要你的密钥在javascript库中,这实际上允许每个人解密你的令牌。哪个会问你为什么要加密开始。但如果您真的需要在javascript中执行此操作,则可以查看SO答案here。