[英]Odd format of Message Authentication Code output
我正在從IBM教程中運行一個示例,該示例有一個簡單的示例,可以在給定的純文本上生成MAC。 代碼如下:
public static void main(String[] args) throws Exception {
//
// check args and get plaintext
if (args.length != 1) {
System.err
.println("Usage: java MessageAuthenticationCodeExample text");
System.exit(1);
}
byte[] plainText = args[0].getBytes("UTF8");
//
// get a key for the HmacMD5 algorithm
System.out.println("\nStart generating key");
KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
SecretKey MD5key = keyGen.generateKey();
System.out.println("Finish generating key");
//
// get a MAC object and update it with the plaintext
Mac mac = Mac.getInstance("HmacMD5");
mac.init(MD5key);
mac.update(plainText);
//
// print out the provider used and the MAC
System.out.println("\n" + mac.getProvider().getInfo());
System.out.println("\nMAC: ");
System.out.println(new String(mac.doFinal(), "UTF8"));
}
一切都很好,但是使用String arg“ This is a test”運行它,我得到以下輸出:
在實際教程中,MAC輸出的格式要好得多,例如
MAC:
Dkdj47x4#.@kd#n8a-x>
,我的意思是我真正認識的字符!
我以為使用“ UTF8”參數可以達到此目的,但我可能弄錯了,所以有人可以告訴我如何將輸出格式化為上述格式嗎?
MAC的輸出是字節數組。 它不是UTF-8字符序列,您可以以有意義的方式將其轉換為字符串。 如果您想從中獲得一些可讀性,則可以選擇以下選項:
出於一個簡短示例的目的,您可以使用
new String(mac.doFinal(), "ISO-8859-1")
您可能會或多或少地獲得一些可讀性。 但是,如果您不走運,您的Mac將包含控制字符,這些字符會干擾您的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.