我正在使用jwt的java代码,但与在线工具相比有一些细微的变化。为什么?
我有一段java代码:我正在使用jwt的java代码,但与在线工具相比有一些细微的变化。为什么?,java,jwt,signature,Java,Jwt,Signature,我有一段java代码: public static String generate(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException { if (key == null || data == null) { throw new NullPointerException(); } fina
public static String generate(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
if (key == null || data == null) {
throw new NullPointerException();
}
final Mac hMacSHA256 = Mac.getInstance(HMAC_SHA256);
byte[] hmacKeyBytes = key.getBytes(StandardCharsets.UTF_8);
final SecretKeySpec secretKey = new SecretKeySpec(hmacKeyBytes, HMAC_SHA256);
hMacSHA256.init(secretKey);
byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8);
byte[] res = hMacSHA256.doFinal(dataBytes);
return Base64.getEncoder().encodeToString(res);
}
使用Base64编码,我得到以下签名:
OpDZIL3l/RRZoeDgMBmlaRGPAthcbyiZJt5wqWFPSK4=
如果我检查在线工具,那里的签名显示:
OPDZIL3LrrzoedgmlArgPathCBYIZJT5WQWFPSK4=
只有“\u1”被替换为“/”。
谁能帮我解决这个问题,因为我是新加入JWT的
提前谢谢
只有“\u1”被替换为“/”。有人能帮我解决这个问题吗
我是JWT的新手
这与JWT无关-这两个系统只是使用Base64编码的不同变体
问题是,Base64有多种变体。这本书有一个很好的概述
特别是,有所谓的“URL安全”编码,或base64url,在中标准化。与常规Base64的唯一区别在于,它使用字符-
和
而不是+
和/
。这就是你所看到的
顾名思义,URL安全编码的优点是编码字符串可以作为查询参数包含在URL中,而无需进一步编码(即URL百分比编码)。standard Base64使用的字符
+
和/
在URL中具有特殊意义,因此需要进行编码,因此它们被-
和
替换
URL安全编码通常用于JWT,因为它们通常作为URL参数传递