我已经创建了一个SecretkeySpec对象,其中包含一个128位的密钥。
我想将此密钥转换为字符串(稍后需要将此字符串放回原始密钥),因此我使用Base64编码。
这是我的密钥在原始格式中从字节数组转换为字符的方式:
所以我将字节编码如下。
这是我的密钥在原始格式中从字节数组转换为字符的方式:
*P??? ?ukL|?~
所以我将字节编码如下。
byte[] okay = Base64.encode(eF.getSpec().getEncoded());
现在当我把它转换成字符时,我得到:
S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=
现在我希望将我的密钥从Base64编码的数组恢复为其原始格式。
String dkey = "S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=";
byte[] key = null;
key = dKey.getBytes();
key = Base64.decode(key);
现在我检查结果,得到:
DKlDkp+kJ9nUFa0wZHyFfg==
替代方案:
*P??? ?ukL|?~
如您所见,这不是我希望看到的结果。我肯定犯了一个初学者的错误,请原谅我,因为我相对来说还很新手。如果有人能给我一个可行的示例,将128位密钥转换为可读格式,并解释一下我的错误之处,我将不胜感激。
如果有任何拼写错误,我深表歉意,英语不是我的母语。
提前致谢。
Base64
类?它来自 Apache Codec 库吗? - Adam PayntereF.getSpec().getEncoded()
是什么意思?我在解码部分没有看到类似的调用。 - casablancaSecretKeySpec
类的getEncoded()
方法。如果是这样的话,它应该只返回表示密钥的原始字节。 - Adam PaynterHex
类(也在Commons Codec中)对密钥进行编码/解码,会有作用吗?请参见encodeHexString
和decodeHex
。 - Adam Paynter