侃侃尔雅
所以我为我的程序找到了一个解决方案(注意,这只是为了锻炼,所以我不会以任何方式称之为安全)我正在使用这种方法来加密我的 WebServer 上的字符串:private static byte[] encrypt(String plain, String key) throws Exception { byte[] clean = plain.getBytes(); int ivSize = 16; byte[] iv = new byte[ivSize]; SecureRandom random = new SecureRandom(); random.nextBytes(iv); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.update(key.getBytes("UTF-8")); byte[] keyBytes = new byte[16]; System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] encrypted = cipher.doFinal(clean); byte[] encryptedIVAndText = new byte[ivSize + encrypted.length]; System.arraycopy(iv, 0, encryptedIVAndText, 0, ivSize); System.arraycopy(encrypted, 0, encryptedIVAndText, ivSize, encrypted.length); return encryptedIVAndText;}然后我用 Base64 编码生成的字符串Base64.getEncoder().encodeToString(encryptedString)并返回 Base64 字符串。我的应用程序使用 getDecoder 函数解码返回的字符串并使用此方法对其进行解密:public static String decrypt(byte[] encryptedIvTextBytes, String key) throws Exception { int ivSize = 16; int keySize = 16; byte[] iv = new byte[ivSize]; System.arraycopy(encryptedIvTextBytes, 0, iv, 0, iv.length); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); int encryptedSize = encryptedIvTextBytes.length - ivSize; byte[] encryptedBytes = new byte[encryptedSize]; System.arraycopy(encryptedIvTextBytes, ivSize, encryptedBytes, 0, encryptedSize); byte[] keyBytes = new byte[keySize]; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(key.getBytes()); System.arraycopy(md.digest(), 0, keyBytes, 0, keyBytes.length); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipherDecrypt = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipherDecrypt.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] decrypted = cipherDecrypt.doFinal(encryptedBytes); return new String(decrypted);}结果是正常的属性文件。