2016-01-11 53 views
-1

我想加密一個字符串與修復長度的整數,我怎樣才能做到這一點在Java中。 tring實現AES算法,但out是一個特殊的字符,而不是一個數字。Java AES安全實現

  String text = "Test TEST";   
      String key = "deadbeefbeefdead"; // 128 bit key 
     // Create key and cipher 
     Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); 
     Cipher cipher = Cipher.getInstance("AES"); 
     // encrypt the text 
     cipher.init(Cipher.ENCRYPT_MODE, aesKey); 
     byte[] encrypted = cipher..doFinal(text.getBytes()); 
     System.err.println(new String(encrypted)); 
     // decrypt the text 
     cipher.init(Cipher.DECRYPT_MODE, aesKey); 
     String decrypted = new String(cipher.doFinal(encrypted)); 
     System.err.println(decrypted 

);

回答

0

的問題是不明確的,但這裏是一些信息:

  1. 加密生成的8位字節,而不是字符,並非所有的8位字節的可打印字符甚至字在大多數的編碼序列。通常,如果您需要可打印的字符串,則加密數據爲Base64或十六進制編碼。每個加密字節可以被認爲是一個uint8_t「整數」。

  2. AES是分組密碼,它需要16個字節的塊並輸出16個字節的塊。如果輸入不是塊大小填充的倍數(額外字節)必須在加密之前添加到輸入。 「Bhaumik Patel」是13個字節,因此必須在加密之前添加3個字節,並在解密後移除。大多數塊加密庫都包含一個填充選項,通常是PKCS#7(PKCS#5),但偶爾會有空填充。

  3. 還有一種模式,最常見的是ECB(不安全)和CBC。在CBC的情況下,還有一個塊大小的iv(初始化向量),通常是隨機的字節序列。

不幸的是,加密獨自一般只有安全解決方案的一部分

編輯:問題文本輸入從「Bhaumik Patel」改爲「」Test TEST「」。

+0

嗨Zaph,感謝您的回放,根據我的要求,我需要一個數字,所以我使用了AES加密並將其轉換爲十六進制,從十六進制到數字,但數字太大,如39位數字,直到156位數字。有沒有什麼辦法可以減少它,這樣可以減少我想要的數量..在此先感謝您的幫助將受到讚賞! – Patel

+0

加密不會減少位數,因爲您需要使用zip等壓縮算法。如果輸入<= 64位,則可以在不基於塊的CRT模式下進行加密,但CTR模式不易安全。 – zaph

+0

對要加密爲<的文本是否有限制? 64位? – zaph