private byte[] Decrypt(byte[] inData) {
        try {
            byte[] cv = Arrays.copyOf(IV, IV.length);
            byte[] ret = new byte[inData.length];

            int blocks_len = inData.length / 8;
            int left_len = inData.length % 8;

            for (int i = 0; i < blocks_len; i++) {
                byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8);

                temp = decrypt.doFinal(temp);
                xorBytes(temp, cv);
                System.arraycopy(temp, 0, ret, i * 8, 8);
                for (int j = 0; j < cv.length; j++) {
                    cv[j] = (byte) (cv[j] ^ inData[i * 8 + j]);
                }
            }

            if (left_len != 0) {
                cv = encryptor.doFinal(cv);
                byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len);

                xorBytes(temp, cv, left_len);
                for (int j = 0; j < temp.length; j++) {
                    ret[blocks_len * 8 + j] = temp[j];
                }
            }

            return ret;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
Navicat11 and below password encryption and decryption

@author lzy
chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ncx/cipher/Navicat11Cipher.java