JAVA:128位键到字符串的问题和返回

JAVA:128位键到字符串的问题和返回,java,string,key,base64,aes,Java,String,Key,Base64,Aes,我创建了一个包含128位密钥的SecretkeySpec对象。 我想把这个键放在一个字符串中(这个字符串需要稍后放回原始键),所以我使用Base64编码 以下是我的密钥以原始格式从字节数组到字符的外观: *P??? ?ukL|?~ 所以我把字节编码成这样 byte[] okay = Base64.encode(eF.getSpec().getEncoded()); 现在,当我将其转换为字符时,我得到: S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo= 现在,我想让我

我创建了一个包含128位密钥的SecretkeySpec对象。 我想把这个键放在一个字符串中(这个字符串需要稍后放回原始键),所以我使用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位键,也许是我思考错误的一个解释

我为任何拼写错误道歉,英语不是我的母语


提前感谢

您的代码中有一些错误(假设您是从头开始写的)。这看起来像一个工作版本。请注意,使用这些内部类不是很聪明(这里我更喜欢使用ApacheCommons编解码器库,例如及其
org.Apache.Commons.codec.binary.Base64
类)

输出:

SGVsbG8gV29ybGQh Hello World! SGVsbG8gV29ybGQh 你好,世界! 希望这有帮助

S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=
解码为

KlDkp+kJ9nUFa0wZDHyFfg==.
开始时的额外D是否为复制粘贴错误

KlDkp+kJ9nUFa0wZDHyFfg== 
依次是一个有效的base64字符串,它将解码为一些二进制数据。因此,似乎您正在进行两次编码

现在,当我把它翻译成字符时,我得到了


你到底是怎么做到的?该步骤中是否还涉及到另一个base64编码?

您使用的是什么
base64
类?它来自Apache编解码器库吗?
eF.getSpec().getEncoded()
做什么?在解码部分,我没有看到类似的调用。@casablanca:我想这是最重要的。如果是这种情况,那么它应该只返回表示密钥的原始字节@卡萨布兰卡:很抱歉,但亚当是对的。这是以原始字节表示的密钥。在我的解密部分,我有我的字符串,我需要把它放回一个原始字节数组,代表我的新密钥(它应该与我的原始密钥相同,但在我的情况下它不是)。嗨,Jiri,谢谢你的回答,但我的情况有点不同,因为我有一个128位密钥,它需要翻译成可读的格式。因此,我确实像上面所说的那样对它进行编码(byte[]ok=Base64.encode(eF.getSpec().getEncoded());)eF.getSpec().getEncoded()确实是关键,很抱歉这一部分不清楚。但当我解码它时,结果与我的输入不同。我用for循环检查它:String stringkey=“”;for(byte-forbyte:key){char-forchar=(char)forbyte;stringkey+=forchar;}System.out.println(stringkey);我检查了两次代码,只调用了一次Base64.encode,只调用了一次Base64.decode。这似乎确实是一个输入错误。@Rohan:也许你应该编辑你的问题,把所有相关的代码都包括进去。事实上,他的K1Dk etc确实解码成了以(*P)开头的原始密钥。Rohan能检查一下eF.getSpec().getEncoded()的结果吗?@lijie确实,解码我的解码字符串会给我原来的128位密钥,但我不明白为什么会这样。因为我的编码知识一般都很薄弱。getSpec().getEncoded()给了我*P?ukL |?~翻译成字符。
KlDkp+kJ9nUFa0wZDHyFfg==