Java AES安全实现

时间:2016-01-11 18:48:59

标签: java security spring-security

我想用一个修复长度来加密一个String,我怎么能用Java做到这一点。 要实现AES算法,但out是一个特殊字符,而不是数字。

          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

);

1 个答案:

答案 0 :(得分:0)

问题尚不清楚,但这里有一些信息:

  1. 加密生成一个8位字节序列,而不是字符,并非所有8位字节都是可打印字符,甚至是大多数编码中的字符。通常,如果您需要可打印的字符串,则加密数据为Base64或十六进制编码。每个加密字节可以被认为是uint8_t“整数”。

  2. AES是块密码,它需要16个字节的块并输出16个字节的块。如果输入不是块大小的倍数,则必须在加密之前将填充(额外字节)添加到输入。 “Bhaumik Patel”是13个字节,因此在加密之前必须添加3个字节,并在解密后删除。大多数块加密库都包含填充选项,通常是PKCS#7(PKCS#5),但偶尔会出现空填充。

  3. 还有一种模式,最常见的是ECB(不安全)和CBC。在CBC的情况下,还有一个块大小的iv(初始化向量),通常是随机的字节序列。

  4. 不幸的是,仅加密通常只是安全解决方案的部分

    编辑:问题文本输入已从“Bhaumik Patel”更改为“”Test TEST“”。