java – 使字符串不可读

我需要一个尽可能短而快的代码来将String更改为不可读的东西(对于人类而言),并且还要使其再次可读。 这一切都需要在java中发生。

像这样的东西:

encrypt("test"); 

会导致这样的事情:

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

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

将再次导致原始

 test 

我应该去哪个方向,是否有任何课程可以为我做这个? 我不是指像Base68Encryption或其他任何东西,我的意思是一个真正难以理解的文本,我可以安全地通过互联网发送。

请参阅示例代码http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html对数据算法的加密和解密。 加密/解密嵌入在JRE中并且不难使用。

这是使用真正加密的一个非常简短的例子。 它是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 

我应该去哪个方向,是否有任何课程可以为我做这个? 我不是指像Base68Encryption或其他任何东西,我的意思是一个真正难以理解的文本,我可以安全地通过互联网发送。

有两种方法可以解决这个问题:

  • 您可以选择一种现有的高质量加密系统,这种加密系统在典型的JVM中作为标准实现。 然后:

    1. 将字符串编码为字节; 例如使用UTF-8。

    2. 使用商定的加密系统和先前商定的密钥加密字节。

    3. 使用base_64或等效编码字节。

    而在另一端:

    1. 解码base_64

    2. 使用相同的系统和密钥解密字节。

    3. 解码UTF-8以获取字符串。

  • 使用SSL / TLS保护TCP / IP连接,并按原样通过连接发送字符串。

这些选项都不是特别快。 但不要试图发明自己更快的加密系统。 有可能是一个“自制的”加密系统,它比你意识到的要容易得多。

    Interesting Posts