我想用一个修复长度来加密一个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
);
答案 0 :(得分:0)
问题尚不清楚,但这里有一些信息:
加密生成一个8位字节序列,而不是字符,并非所有8位字节都是可打印字符,甚至是大多数编码中的字符。通常,如果您需要可打印的字符串,则加密数据为Base64或十六进制编码。每个加密字节可以被认为是uint8_t“整数”。
AES是块密码,它需要16个字节的块并输出16个字节的块。如果输入不是块大小的倍数,则必须在加密之前将填充(额外字节)添加到输入。 “Bhaumik Patel”是13个字节,因此在加密之前必须添加3个字节,并在解密后删除。大多数块加密库都包含填充选项,通常是PKCS#7(PKCS#5),但偶尔会出现空填充。
还有一种模式,最常见的是ECB(不安全)和CBC。在CBC的情况下,还有一个块大小的iv(初始化向量),通常是随机的字节序列。
不幸的是,仅加密通常只是安全解决方案的部分。
编辑:问题文本输入已从“Bhaumik Patel”更改为“”Test TEST“”。