有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使字符串不可读

我需要一个尽可能短、尽可能快的代码来将字符串更改为不可读的内容(对于人类而言),并使其再次可读。这一切都需要在java中实现

比如:

encrypt("test");

会导致这样的结果:

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

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

会不会再次变成原来的结果

test

我应该往哪个方向走,有什么课程可以帮我做到这一点吗?我指的不是Base68Encryption之类的东西,我指的是可以通过互联网安全发送的真正不可读的文本


共 (3) 个答案

  1. # 1 楼答案

    What direction should I go, are there any classes that can do this for me? I don't mean something like Base68Encryption or whatever it might be called, I mean a true unreadable text that I can safely send over the internet.

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

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

      1. 将字符串编码为字节;e、 g.使用UTF-8

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

      3. 使用base_64或等效代码对字节进行编码

      在另一端:

      1. 解码基_64

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

      3. 解码UTF-8得到一个字符串

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

    这两种选择都不是特别快。但不要试图发明自己更快的加密系统。一个“自制”的加密系统很可能比你意识到的要容易破解

  2. # 2 楼答案

    下面是一个使用真正加密的简短示例。它是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