我创建了一个包含128位密钥的SecretkeySpec对象。 我想在String中使用此键(此字符串需要稍后重新放入原始键中),因此我使用Base64编码。
这是我的键以原始格式从字节数组看到chars:
*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位密钥,也许是我思考错误的解释。
我为任何拼写错误道歉,英语不是我的母语。
提前致谢
答案 0 :(得分:2)
S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=
解码为
KlDkp+kJ9nUFa0wZDHyFfg==.
开头的额外D是复制和粘贴错误吗?
KlDkp+kJ9nUFa0wZDHyFfg==
反过来是一个有效的base64字符串,它解码为某些二进制数据。所以看起来你正在进行两次编码。
现在当我把它翻译成字符时,我得到了
你到底是怎么做到的?该步骤是否涉及另一个base64编码?
答案 1 :(得分:0)
你在代码中遇到了一些错误(假设你是从头顶写的)。这看起来像一个工作版本。请注意,使用这些内部类并不是很聪明(这里我更喜欢使用Apache Commons Codecs库,例如它的org.apache.commons.codec.binary.Base64
类)。
package edu.sasik.test.encoding;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class TestBase64 {
public static void main(String[] args) {
String base64Str = Base64.encode("Hello World!".getBytes());
System.out.println(base64Str);
byte[] bytes = Base64.decode(base64Str);
System.out.println(new String(bytes));
}
}
输出:
SGVsbG8gV29ybGQh Hello World!
希望这有帮助。