2010-12-04 79 views
3

我創建了一個包含128位密鑰的SecretkeySpec對象。 我想這個關鍵字在一個字符串(這個字符串需要放回原來的關鍵),所以我使用Base64編碼。JAVA:字符串問題的128位密鑰並返回

這是我的鑰匙怎麼看起來從字節數組的原始格式轉換成字符:

*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

你正在使用什麼`Base64`類?它來自Apache Codec庫嗎? – 2010-12-04 16:30:37

+0

`eF.getSpec()。getEncoded()`做了什麼?我在解碼部分看不到類似的調用。 – casablanca 2010-12-04 16:48:25

+0

@casablanca:我*推測*它是``SecretKeySpec`類的``getEncoded()`方法](http://download.oracle.com/javase/1.4.2/docs/api/javax/crypto/spec /SecretKeySpec.html#getEncoded%28%29)。如果是這種情況,那麼它應該簡單地返回代表密鑰的原始字節。 – 2010-12-04 16:53:07

回答

2
S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo= 

解碼爲

KlDkp+kJ9nUFa0wZDHyFfg==. 

是在開始複製和粘貼錯誤額外d?

KlDkp+kJ9nUFa0wZDHyFfg== 

依次是解碼爲某些二進制數據的有效base64字符串。所以你似乎在編碼兩次。

現在,當我把它翻譯成字符,我得到

正是你怎麼樣呢?那一步是否還有另一個base64編碼?

0

你在代碼中有一些錯誤(假設你從你的頭頂上寫的)。這看起來像一個工作版本。請注意,使用這些內部類不是很聰明(在這裏我寧願使用Apache Commons編解碼器庫,例如它的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! 

希望這有助於。