官网中有这么一段:
If you need to save this new SecretKey, you can Base64 (or Base64URL) encode it:
String secretString = Encoders.BASE64.encode(key.getEncoded());
链接:https://github.com/jwtk/jjwt?tab=readme-ov-file#creating-safe-keys
问题来了,如何反向解码呢?知道了String类型的secretkey,如果转变成SecretKey类型呢?
大概过程我能想到,是Decoders.BASE64.decode(secretString)
,但是后面想不到了,有谁知道吗?
这下面不就是吗
SecretKey key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretString));
在JJWT库中,当你需要将Base64编码的密钥字符串转换回SecretKey
对象时,你需要先解码该字符串为字节数组,然后使用该字节数组来创建或恢复SecretKey
对象。这里的关键在于,你需要知道原始的密钥是什么类型的(例如,AES密钥通常是一个SecretKeySpec
的实例)。
以下是一个基于假设原始密钥是AES密钥的示例步骤,来展示如何从Base64编码的字符串中恢复SecretKey
对象:
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.SignatureAlgorithm;
import java.security.Key;
import java.security.spec.SecretKeySpec;
import java.util.Base64;
public class SecretKeyExample {
public static void main(String[] args) {
// 假设这是你从某处获取的Base64编码的密钥字符串
String secretString = "这里应该是你的Base64编码的密钥字符串";
// 使用Base64.Decoder来解码字符串
byte[] decodedBytes = Base64.getDecoder().decode(secretString);
// 如果原密钥是AES密钥,那么你需要创建一个SecretKeySpec实例
// 注意:这里的"AES"是算法名称,"256"是密钥长度(根据你的密钥而定,可能是128、192或256)
SecretKeySpec secretKey = new SecretKeySpec(decodedBytes, "AES");
// 现在你可以使用这个secretKey作为JWT签名的密钥了
// 例如,创建一个Signer
Key key = secretKey; // SecretKey实现了Key接口
// 使用这个密钥进行JWT的签名或验证等操作...
// 注意:这里只是展示了如何恢复密钥,并没有实际进行JWT操作
}
}
请注意,上面的示例中,"AES"
和"256"
应该根据你的实际密钥类型和长度进行调整。如果你不确定密钥的算法和长度,你可能需要查阅生成密钥时的相关代码或文档。
另外,虽然JJWT库提供了Encoders
和Decoders
类用于Base64编码和解码,但Java的java.util.Base64
类同样可以用来完成这个任务,并且它是Java标准库的一部分,因此不需要额外依赖。在上述示例中,我使用了java.util.Base64
来解码Base64字符串。
介绍 Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 使用 String a = "伦家是一个非常长的字符串"; //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy String encode = Base64.en
以下是我的要求: 程序将有一个XML文件作为输入,带有3个标记:、和。所有这些数据都是Base64编码的。注意:程序正在使用BC JAR 下面是我试图解码证书的代码: 当我打印new String(certByteValue, Standard ardCharset.UTF_8)的值时,程序正在打印一些无法识别的文本。当执行代码的最后一行时,系统正在抛出 java.security.cert.证书
问题内容: 这是我的代码,我不明白为什么解码功能不起作用。 请少有洞察力会很棒。 它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8] 问题答案: 返回 最大 长度。 此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。 您只需要使用函数返回的实际写入长度即可。
new String(..)转字符串的时候是怎么知道 -28, -72, -83 为一组的呢? 是字符编码有什么规则吗?( 0x**---- ,(byte) ** 是负数的就是3个字节一组这样?)
主要内容:1 Java8 Base64编码解码的介绍,2 基本编码和解码,3 URL和文件名的编码解码,4 MIME,5 Base64的内部类,6 Base64的方法,7 Base64.Decoder的方法,8 Base64.Encoder的方法,9 Java Base64案例:基本编码和解码,10 Java Base64案例:URL编码和解码,11 Java Base64案例:MIME编码和解码1 Java8 Base64编码解码的介绍 Java提供了一个Base64类来处理加密。您可以使用提
Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本。 Base64也称为Privacy enhanced Electronic mail (PEM) ,主要用于电子邮件加密过程。 Python包含一个名为BASE64的模块,它包括两个主要功能,如下所示 - base64.decode(input, output) - 它解码指定的输入值参数,并将解码的输出存储为对