2013-04-26 71 views
-1

我需要一個儘可能短而且儘可能快的代碼來將字符串更改爲不可讀的內容(對於人類而言),並且還要使其再次可讀。這一切都需要在java中發生。java - 使字符串不可讀

事情是這樣的:

encrypt("test"); 

會導致這樣的事情:

ôT¿ÄÜTV CÁˆ「5="ËÂÀœššbÀß{¡ä³ 

decrypt("ôT¿ÄÜTV CÁˆ「5 1="ËÂÀœššbÀß{¡ä³"); 

會不會再次導致成原

test 

我應該走什麼方向,有沒有什麼課程可以爲我做這個?我的意思不是像Base68Encryption或任何它可能被稱爲的東西,我的意思是一個真正難以理解的文本,我可以安全地通過互聯網發送。

+1

Base_64是人類可讀的嗎?嗯,你知道一些聰明的人。 – jn1kk 2013-04-26 14:14:52

+0

爲了安全地公開分享加密信息,您需要共享密碼或公鑰/私鑰加密。請詳細說明您實際需要防範的威脅。休閒閱讀?更強大的東西? – 2013-04-26 14:15:10

+0

http://stackoverflow.com/questions/8622367/what-are-best-practices-for-using-aes-encryption-in-android?rq=1 – durron597 2013-04-26 14:16:46

回答

1

這是使用真正加密的一個非常簡短的例子。這是128位AES,它非常安全 - 當然不能被任何想象中的可讀性所讀取。

它會生成一個隨機密鑰,所以每次運行都會有所不同。您需要分享他們之間交換數據的兩個程序之間的密鑰。

private static final String ENCRYPTION_ALGORITHM = "AES/ECB/PKCS5Padding"; 
private static final SecureRandom RANDOM = new SecureRandom(); 

public static void main(String[] args) throws UnsupportedEncodingException, GeneralSecurityException { 
    final KeyGenerator keyGen = KeyGenerator.getInstance(ENCRYPTION_ALGORITHM.substring(0, ENCRYPTION_ALGORITHM.indexOf('/'))); 
    keyGen.init(128, RANDOM); 
    final SecretKey key = keyGen.generateKey(); 
    final String s = "My topsecret string"; 
    System.out.println(s); 
    final Cipher encryption = getCipher(key, Cipher.ENCRYPT_MODE); 
    final String enc = DatatypeConverter.printBase64Binary(encryption.doFinal(s.getBytes("UTF-8"))); 
    System.out.println(enc); 
    final Cipher decryption = getCipher(key, Cipher.DECRYPT_MODE); 
    final String dec = new String(decryption.doFinal(DatatypeConverter.parseBase64Binary(enc)), "UTF-8"); 
    System.out.println(dec); 
} 

private static Cipher getCipher(final Key key, final int mode) throws GeneralSecurityException { 
    final Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM); 
    cipher.init(mode, key, RANDOM); 
    return cipher; 
} 

輸出:

My topsecret string 
ip4La5KUBJGTTYenoE920V5w0VBHwALv4fp3qyLTY9o= 
My topsecret string 
0

我應該去什麼方向,是否有能爲我做到這一點的任何類?我的意思不是像Base68Encryption或任何它可能被稱爲的東西,我的意思是一個真正難以理解的文本,我可以安全地通過互聯網發送。

有解決這個方法有兩種:

  • 你可以挑選那些在一個典型的JVM實現爲標準現有的高品質的加密系統之一。然後:

    1. 將字符串編碼爲字節;例如使用UTF-8。

    2. 使用約定的加密系統和先前商定的密鑰加密字節。

    3. 使用base_64或等價物對字節進行編碼。

    ,並且在另一端:

    1. 解碼的base_64

    2. 解密使用相同的系統和密鑰的字節數。

    3. 解碼UTF-8以獲取字符串。

  • 使用SSL/TLS來保護TCP/IP連接,並通過連接原樣發送字符串。

這些選項都不是特別快。但不要試圖去創造你自己的更快的加密系統。有可能是一個「家庭釀造」的加密系統,它會比你意識到的更容易破解。