Java 字符串不等于字符串?

Java String not equal String?

我要decrypt一个String。这是我的 DecryptionEncryption 方法。

public String encrypt(String message) throws Exception {
    byte[] messageInBytes = message.getBytes();
    encryptionCipher = Cipher.getInstance("AES/GCM/NoPadding");
    encryptionCipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedBytes = encryptionCipher.doFinal(messageInBytes);
    return encode(encryptedBytes);
}
public String decrypt(String encryptedMessage) throws Exception {
    byte[] messageInBytes = decode(encryptedMessage);
    Cipher decryptionCipher = Cipher.getInstance("AES/GCM/NoPadding");
    GCMParameterSpec spec = new GCMParameterSpec(T_LEN , encryptionCipher.getIV());
    decryptionCipher.init(Cipher.DECRYPT_MODE, key, spec);
    byte[] decryptedBytes = decryptionCipher.doFinal(messageInBytes);
    return new String(decryptedBytes);
}

这里主要是:

public static void main(String[] args) {
    try {
        AES aes = new AES();
        aes.convertStringKeyToSecretKey();
        String encryptedMessage = aes.encrypt("Peter");
        String decryptedMessage = aes.decrypt(encryptedMessage);

        System.err.println("Encrypted Message : " + encryptedMessage);
        System.err.println("Decrypted Message : " + decryptedMessage);
    } catch (Exception ignored) {
    }
}

当我将 encryptedMessage 更改为自己的 String 时,例如:

String decryptedMessage = aes.decrypt("xDFzl9HsenqKspdEbL/m9I5X6dqn");

它什么都不做

希望你能帮助我。

此致

基督教徒

public static String encryptAES(String toEncrypt, final String key1, final String key2) throws Exception {
            try {
                byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
                IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);

                SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                KeySpec keySpec = new PBEKeySpec(key1.toCharArray(), key2.getBytes(), 65536, 256);
                SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
                SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getEncoded(), "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);

                return Base64.getEncoder().encodeToString(cipher.doFinal(toEncrypt.getBytes(StandardCharsets.UTF_8)));
            } catch (Exception ex) {
                throw new Exception(ex);
            }
        }

        public static String decryptAES(String toDecrypt, final String key1, final String key2) throws Exception {
            try {
                byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
                IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);

                SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                KeySpec keySpec = new PBEKeySpec(key1.toCharArray(), key2.getBytes(), 65536, 256);
                SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
                SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getEncoded(), "AES");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);

                return new String(cipher.doFinal(Base64.getDecoder().decode(toDecrypt)));
            } catch (Exception ex) {
                throw new Exception(ex);
            }
        }

在这里您仍然可以通过创建您自己的 IV 规范密钥来扩展它的安全性,它应该只包含 16 个字符。

实际上,这就是我的 AES 加密方式,您也可以在 GitHub 中查看此存储库以了解其他加密方法。