JAVA:字符串问题和返回的128位密钥

时间:2010-12-04 16:10:39

标签: java string key base64 aes

我创建了一个包含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位密钥,也许是我思考错误的解释。

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

提前致谢

2 个答案:

答案 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!

希望这有帮助。