簡體   English   中英

JAVA:字符串問題和返回的128位密鑰

[英]JAVA: 128-bit key to String problem and back

我創建了一個包含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位密鑰的工作示例,我將不勝感激,也許是我在思考時出錯的解釋。

我為任何拼寫錯誤道歉,英語不是我的母語。

提前致謝

S2xEa3Ara0o5blVGYTB3WkRIeUZmZz09DQo=

解碼為

KlDkp+kJ9nUFa0wZDHyFfg==.

額外的D在開頭是復制和粘貼錯誤嗎?

KlDkp+kJ9nUFa0wZDHyFfg== 

反過來是一個有效的base64字符串,解碼為一些二進制數據。 所以看起來你正在進行兩次編碼。

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

你究竟是怎么做到的? 該步驟是否涉及另一個base64編碼?

您在代碼中遇到了一些錯誤(假設您是從頭頂編寫的)。 這看起來像一個工作版本。 請注意,使用這些內部類並不是很聰明(這里我更喜歡使用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!

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM