代码 2020/7/24 可正常运行
如有冒犯请立即联系博主,整改文章!!

必读!

《文书网app》是一个入门级的逆向app, 这里分析其中一个接口, 作为学习和交流。!!!!

  1. 代码只是一个单接口的示例
  2. 要根据自己需求举一反三抓包进行开发

  • 目标API, 打开APP后查看,文书列表的接口!

分析

找到接口代码位置

该步骤可以通过抓包快速获取到! 该app没有任何的反制抓包的措施,所以这里不细说了。

com.lawyee.wenshuapp.a

利用 xposed 或者 Frida 快速动态调试, 拿到参数结构

[*] 参数1:{"id":"20200603095038","command":"queryDoc","params":{"devid":"41d861ffe5b347d28454dc3f07dd4212","devtype":"1","ciphertext":"1010000 110110 1010000 1101010 1100100 1000110 1010010 110111 1110101 1101100 1011001 1110011 1010011 1111000 1101011 1001110 1101110 1110111 1100001 1101001 1110100 1100010 1001101 1000110 110010 110000 110010 110000 110000 110110 110000 110011 1001110 1001110 1011010 110101 1101100 1000111 101111 1110000 1001111 111001 110110 1101000 110111 1111001 1001011 1100010 1101111 1000101 1110011 101111 1000001 1110111 111101 111101","pageSize":"20","sortFields":"s50:desc","pageNum":"1","queryCondition":[{"key":"s8","value":"02"}]}}
[*] 参数2:null

可以发现关键加密数据在 参数1中,我们单独拿出来看

{
    "id": "20200603095038",
    "command": "queryDoc",
    "params": {
        "devid": "41d861ffe5b347d28454dc3f07dd4212",
        "devtype": "1",
        "ciphertext": "1010000 110110 1010000 1101010 1100100 1000110 1010010 110111 1110101 1101100 1011001 1110011 1010011 1111000 1101011 1001110 1101110 1110111 1100001 1101001 1110100 1100010 1001101 1000110 110010 110000 110010 110000 110000 110110 110000 110011 1001110 1001110 1011010 110101 1101100 1000111 101111 1110000 1001111 111001 110110 1101000 110111 1111001 1001011 1100010 1101111 1000101 1110011 101111 1000001 1110111 111101 111101",
        "pageSize": "20",
        "sortFields": "s50:desc",
        "pageNum": "1",
        "queryCondition": [{
            "key": "s8",
            "value": "02"
        }]
    }
}

初略看来 需要解决的难点就是 ciphertext 所以先解决这个

参数:ciphertext

通过静态分析 位置在 com.lawyee.wenshuapp.util

package test;

import java.util.Calendar;
import java.util.Date;


public class Enc {


    public static String a(int i) {
        String str = "";
        char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        for (int i2 = 0; i2 < i; i2++) {
            str = str + cArr[(int) Math.round(Math.random() * ((double) (cArr.length - 1)))];
        }
        return str;
    }

    public static String a(String str) {
        StringBuffer stringBuffer = new StringBuffer("");
        String[] split = str.split("");
        for (int i = 1; i < split.length; i++) {
            if (i != 1) {
                stringBuffer.append(" ");
            }
            stringBuffer.append(Integer.toBinaryString(split[i].charAt(0)));
        }
        stringBuffer.append("");
        return stringBuffer.toString();
    }

    
    public static void main(String[] args) {
        StringBuilder sb;
        StringBuilder sb2;

        // TODO Auto-generated method stub
        Calendar instance = Calendar.getInstance();
        Date date = new Date();
        String str = date.getTime() + "";
        System.out.println(str);
        String a = a(24);
        String str2 = instance.get(1) + "";
        System.out.println(str2);    

        if (instance.get(2) + 1 > 10) {
            sb = new StringBuilder();
            sb.append(instance.get(2) + 1);
            sb.append("");
        } else {
            sb = new StringBuilder();
            sb.append("0");
            sb.append(instance.get(2) + 1);
        }
        String sb3 = sb.toString();
        if (instance.get(5) > 10) {
            sb2 = new StringBuilder();
            sb2.append(instance.get(5));
            sb2.append("");
        } else {
            sb2 = new StringBuilder();
            sb2.append("0");
            sb2.append(instance.get(5));
        }
        String str3 = str2 + sb3 + sb2.toString();
//        return a(a + str3 + m.a(str, a, str3));
        System.out.println(str);
        
        System.out.println(a);    
        System.out.println(str3);    
           
    }
}

这里需要Java基础,上面的代码是我改写后的java代码,可以独立运行。

但是我们用python的scrapy 来开发的话,需要把代码转码成python的

他这里的主要内容是, 生成了一个时间,和随机字符串,来做加密

1591150681363  // 时间戳待加密
PdrEX6eEqvN9VhTFkmgQsRSg  // key 随机生成的 (1~0,a~z, A~Z)
20200603 // 日期 IV

desede/CBC/PKCS5Padding

然后拿到这个加密结果

fLW/YBSP8KrKx4K9bKPivQ==

ergvgq9oFriepCsKDiZGS8uJ20200603fLW/YBSP8KrKx4K9bKPivQ==

组装细节
ergvgq9oFriepCsKDiZGS8uJ
20200603
fLW/YBSP8KrKx4K9bKPivQ==

最后传到 a函数中,就可以变成我们提交的ciphertext

public static String a(String str) {
    StringBuffer stringBuffer = new StringBuffer("");
    String[] split = str.split("");
    for (int i = 1; i < split.length; i++) {
        if (i != 1) {
            stringBuffer.append(" ");
        }
        stringBuffer.append(Integer.toBinaryString(split[i].charAt(0)));
    }
    stringBuffer.append("");
    return stringBuffer.toString();
}

翻译到 python 代码

_str = 'kCWWxWXFB61z22t9dP66m7cz20200603TewDS0DscsJEZ70PVZsxtg=='
new_str = ''
for i in _str:
    if i != 1:
        new_str += " "
    new_str += str(bin(ord(i))[2:])
print(new_str.strip())

参数id

在请求的时候加密前我们还看到一个参数: id

"id": "20200603095038",
查看代码发现是,年月日时分秒

然后我们就可以把这些明文内容进行加密得到发送的request, java代码在这里

package com.lawyee.wenshuapp.util;

import java.util.Arrays;

public class c {

    public static class a {
        static final a a = new a(false, (byte[]) null, -1, true);
        static final a b = new a(true, (byte[]) null, -1, true);
        static final a c = new a(false, j, 76, true);
        private static final char[] h = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
        private static final char[] i = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'};
        private static final byte[] j = {13, 10};
        private final byte[] d;
        private final int e;
        private final boolean f;
        private final boolean g;

        private a(boolean z, byte[] bArr, int i2, boolean z2) {
            this.f = z;
            this.d = bArr;
            this.e = i2;
            this.g = z2;
        }

        private final int a(int i2) {
            int i3;
            if (this.g) {
                i3 = ((i2 + 2) / 3) * 4;
            } else {
                int i4 = i2 % 3;
                i3 = ((i2 / 3) * 4) + (i4 == 0 ? 0 : i4 + 1);
            }
            int i5 = this.e;
            return i5 > 0 ? i3 + (((i3 - 1) / i5) * this.d.length) : i3;
        }

        private int a(byte[] bArr, int i2, int i3, byte[] bArr2) {
            char[] cArr = this.f ? i : h;
            int i4 = ((i3 - i2) / 3) * 3;
            int i5 = i2 + i4;
            int i6 = this.e;
            if (i6 > 0 && i4 > (i6 / 4) * 3) {
                i4 = (i6 / 4) * 3;
            }
            int i7 = 0;
            while (i2 < i5) {
                int min = Math.min(i2 + i4, i5);
                int i8 = i2;
                int i9 = i7;
                while (i8 < min) {
                    int i10 = i8 + 1;
                    int i11 = i10 + 1;
                    byte b2 = ((bArr[i8] & 255) << 16) | ((bArr[i10] & 255) << 8);
                    int i12 = i11 + 1;
                    byte b3 = b2 | (bArr[i11] & 255);
                    int i13 = i9 + 1;
                    bArr2[i9] = (byte) cArr[(b3 >>> 18) & 63];
                    int i14 = i13 + 1;
                    bArr2[i13] = (byte) cArr[(b3 >>> 12) & 63];
                    int i15 = i14 + 1;
                    bArr2[i14] = (byte) cArr[(b3 >>> 6) & 63];
                    i9 = i15 + 1;
                    bArr2[i15] = (byte) cArr[b3 & 63];
                    i8 = i12;
                }
                int i16 = ((min - i2) / 3) * 4;
                i7 += i16;
                if (i16 == this.e && min < i3) {
                    byte[] bArr3 = this.d;
                    int length = bArr3.length;
                    int i17 = i7;
                    int i18 = 0;
                    while (i18 < length) {
                        bArr2[i17] = bArr3[i18];
                        i18++;
                        i17++;
                    }
                    i7 = i17;
                }
                i2 = min;
            }
            if (i2 >= i3) {
                return i7;
            }
            int i19 = i2 + 1;
            byte b4 = bArr[i2] & 255;
            int i20 = i7 + 1;
            bArr2[i7] = (byte) cArr[b4 >> 2];
            if (i19 == i3) {
                int i21 = i20 + 1;
                bArr2[i20] = (byte) cArr[(b4 << 4) & 63];
                if (!this.g) {
                    return i21;
                }
                int i22 = i21 + 1;
                bArr2[i21] = 61;
                int i23 = i22 + 1;
                bArr2[i22] = 61;
                return i23;
            }
            byte b5 = bArr[i19] & 255;
            int i24 = i20 + 1;
            bArr2[i20] = (byte) cArr[((b4 << 4) & 63) | (b5 >> 4)];
            int i25 = i24 + 1;
            bArr2[i24] = (byte) cArr[(b5 << 2) & 63];
            if (!this.g) {
                return i25;
            }
            bArr2[i25] = 61;
            return i25 + 1;
        }

        public byte[] a(byte[] bArr) {
            byte[] bArr2 = new byte[a(bArr.length)];
            int a2 = a(bArr, 0, bArr.length, bArr2);
            return a2 != bArr2.length ? Arrays.copyOf(bArr2, a2) : bArr2;
        }

        public String b(byte[] bArr) {
            byte[] a2 = a(bArr);
            return new String(a2, 0, 0, a2.length);
        }
    }

    public static a a() {
        return a.a;
    }
}

解密

{
    "ret": {
        "msg": "",
        "code": 1
    },
    "data": {
        "secretKey": "6QjyBJjoxQY2gUrl5R7eMGI5",
        "content": "JFojSfSpVHO9ufNK7AMpPvI1jIaQkJG0/wy0CjurPXMRQJzxBPuKg7VRexeWI73spnhYPbm4n/DLlpdK4Y9yRIhKVes8d+zQHwydZVjt8td2lax1j6qn1QjnsD4ITIgZfhebPRdkfvXfW4uZKnjr2RRyTAnMAeUP5Xxv6lLkRV0k8q16nPYqzPxsRsLoq3RgImwR5A40fLALWyyF6uCEg2h52+Iqogj0eT8RAJuFy50dBDIdEI1uMTvMQHT6vzbNCf/3nv20HtoeMOH6ioGcj04lckVoq0aTXplD8ICcSseLLr31bZPbtgMUG1qXFSLbSpvfP9/vBFbbEhlaVNNpMjeFsWFNd5a/UnUTUVB1F6YS00DLuWaQ7i8B3BI9iKFZVBRTbC6bnv9FVy2S0x5tGxmAM0EauZIRtMztmCSDkhQKb38kTxFUuNhFyU1NZ8htPJUXDNm6yqlSqHPEPc36lEFH+wbJW1BRrDj79PyvSbpV+sQur8rWOe5iktyNXnGDADe1RYp89oNbSReuxI/Bz4q86B07Wc1B9qerKqvtPgUaYZ9MR6FTEbq87wc5OSWRWq1kCgcjGAkIZF42M+ngZiPhaC2MQOrVX7mvwxsbaPtXjhkZkcao6HX5D7+AwX2LkICH8osS3/Qsmup8duB6K+ADaFyclbwftlPJ4xfKJZYne7EoSv87A2YE/iO8y8fLCiNWOT1Cd/CiOCrbrakjX2PiuxLIIymJzelUTlz/XyqqATOYwGf7/hotqyZNKodog9S3MHNmYx9lHAVEbLwAMge37lOHN32VDzdZjSaBx1To3i6iasqa3o/swZItnXc1OW34hERuZJiERq4GLo0y1Z9iHrildm+Q8h8dYePfg1koHonP6XXbVLdXsr0zNjFils3wK57TBzC5kUBuK5hJy7E5KEYMpszUohZYT3aWA/ZHmm0f28aTTnygUJ6PCx5vXjEAQtd5ruKwQbDxFHrQvaprKg2+hdylzxtoEYmqbNHZr2IqJ8ETL0vMdABEpMhsvOcGiS+eu2wPGSrJPVT+iFtuhCmr9OY8qev3tFiXLG4n5U4/cQZ9Bz8Ve37dXi5wmYjH3P0/dYvS5S2NeCW5Vxa7eQ15QJ5d5Ob+I/dpjQKzptd5oIczBnu6QfJdvZwX4dH2ovHwFeW5e7a/OJp7zW5tsG7vcdjG1MWl1SIoPeK3G0gsbIBkb0bbtZVQqFEE0tbQBSctki3x22A+12CXB0jAyeSwhOnq6aJirhJ5iHUE8SOPxGI5nvvCB5bJkW9jJD63uSfB1yISCoBPVRpg4Q4fYPrFMxUl+WqMK7ZHR9EpVOmZH9W2ClKIt5kCdQKakaH7h1OAOJ5tWveeUUelxgr1aMlnU9rXCHiCvuvJHYaaprjjaO3/Y/vWO0AEzMkXF+Bz9JSs9iyvourzjvlvMJUXUJvF8MJaze8vIeSznkV+wJPAVPNPoF+jQZUc33z2mASv9zsML3JZMbt8KAwyB+i5gBHrDjdq75SDJVs0pXWNZo8F2IFKt/mbEFT6hu8XVSJbZduBSJm6hJ5b9/9rd6bRZ7ChhEPqSETbVfoBtzwzHx2BA+OUqE3T/Kor3C187t9dN08WxSVDMnnyZBdbPCjaNyVLd6cwhAswal89EncMgMrO/zRuac8Eh2vDVKyQniq8BjYvuaffuLs8aNtyXD6wQCPQTIL8+UlJMOsS7FoVSctmVJDgSA7dR5rtEdy1KKNKf8TwpxDro2nv18GNWN7PlXnSMrAVuQ2BizZExmK/7vzLY7J5l6MeL38GoFQqjO2qFBJZs4jValfMRrA2Npi7rdsg7toczhL9Ia7iJrfWUbNGR8cifqmsVXmohgNi7N+6BIZp1q3jIiEYdPwkKDrcCMCqUz7KyeVz/r3ou7FFfCgObQmNnHCDFyY4PxKIHZNmhmHFxhYNavaZKbczOQZ36Y6Oi+DgL9urZluf7LQ56L7sITBRuj+Gvs8FlV/6uMaKfPcc05LT4L/57BQaUrVqUz31oCDHb1FOHyRuewvvf0DEty3yC8TAEifOV//RJyixsXlKvhCzwOY/dAO9EthKLLwhxKVAxQZEPG48o4dCOY1PR3GbIQq8EXLnWW3iuv5EVIWGzYfJYbGA/pf0+/Drs8rJX3JwkWjX/okzE+S617fvJwWr0P8cEnjfm/gjf7Xnc5oGd8STZssoT7puru5al7TeomoLJjHndXx9xhxcO/MYu2ZMsAekYRN2seCCrCiuYhtQiBpiG9jH4EPzjn76XWme5l1CRhFSPQgL1l2DuzkLbJtoxuNVSp8jVWDuyhDKbw3imSTu+dlqI4Pj5MUvOfmOXD2FdJMDfcJoS38SmWt5Rj/W8Iql4IQ1M4sa46brApldr32DHGuXeBumu/Mof3qa2IYPlVq5nD0xbceBjfFT91j8M/wOJ4KjB/EEkLRYniA67uqUnwkNH9IjNpP3g+V4QRiO8zhv38FTqHKYApooAI7GnqXXOeDSCn15Kz3Li0xPQtd92rYH24QKkxl9p0gepmuGWnEFxZZlC/seCyi396naP/hMDYKzAHX6domK6mTgFn8UQAACD4DVCFZPLdKQV8ucf54sDpuo9G/wZAZE7b0pnBp+GsQpy1TB1BhJ+pbNsasra6wM+9luUGV1fp0vRjEyKrpt6ZoYG5KduvNgO+JaVZZj3dLMdSrYyPwa1ixt56T8bm05IJmVPtL1JRVsadimdoMdbXEnfuKEkqpAt9UcMn+rLsiLHfxvocyHULahXz3ZNGBUlKrlJfslixeEOg+3EMlC+ubt+i0ceoBvye3qk18PKWStRpxqKDVNZb7RTJQitDPwo90EEY7/c3JleW19rtksF8t/1Y39aztuRDrWz4EmAQYXfoRpeiXniiioptZnjJQZAVKGPn3RulES87HDN0h9xvK5JVYJBeKZfraBsNw7bAUe/osfrENWG+3+C+uVgMDI9wsjEKAJSB8u9NUrYUBwMQBudiT8SMr39RTyj7M41mRAwzj3tp4RVyABuEvQrHuMHjDBVHHZDRI2x6Pq/jTQclT6aoNcLJ56fuFyjHbX/UDwD5RBGPBjcBvd1luWdcBzy0MFzkPQQTqZFR9uTL1m9WI0WPSugsy5zoqp1psehesR4G7VKwlbw0CmLVUEWTSC73OrGgGWpTV4aBOTYwA1fhq5yLKsUClE8n+LVszLx3ovFsAZX3pOv9fkxrl5EmjmPf2zlBGpfZ5nIgL5oloSIoaRZ15qjCdPW1VHsXcupwRd80iDBku24se7zY3+v8m4VyRx4f+EsY1ZBGsya18MpdI4GvuBfA+u7ramLaLti9nKpaOwZ3obTGwOeNlYubALfgRAaYAjJDUwM0Y0HgYGkFDPkKX8JCy+28HfTkbxBRMpiY2KnUJ9uw3inpFtUhYA86TiPM759ob1alr+6lK9Mmqct7bt0FuLzzRpQzCvvvzPQ+rhL8EmUttgPcf0tioCEFfV3w5slZzDTbcu1c/V3wKtHJce4y1koCzQy7cwow9HMKAxQTtbuUMKbymizN8e+7gYFxM59Lx7yEfcBsQPtAd53I0pI+llnA0tg9wjnw7G8ry684wTD/Lt3b2WpKcpTThSl1uySXTduU7manqvqtK2X3u8qQZS8ZAmPn+x4xsWxC3M68oZi4BsjYV2BosuHWwYFmU+nNW3grQ2Owr6oXjQGECh8uM6xrluAf6yidIgk39xbYo9kG5uyYHjLorSzyuhdirPGRf7N0GlOHLV+RcCZTrikBDVxTS0kFk8hB22Vc2/CL0O7qazNq9y6ucnox7DsMlKDycTih1jXDS4cgjH9pq8xP14qv/gOi5g7JFofCjvcnrowkEvMt8iqCVVKyggpf2Ff8bdeEhcxAL1VvHR3RuREJ92ZeDx7VBoy9mhlCDzlPyhH/Xv048zQMvVKVXVatC+ialxkZYGnpRHvQytM2twljgqLyEbOkQI0PVOP50ExmYHeMt9J9Y74P+ze+E1v1ViamuyEbj80pZ8EO0NzbG9bRNsSNSfjeOQqF9vR9SgRRYmcqXuwhppe9eBiMYUd2v1D+S4X/iHeBk3bhXptbEX5LdD2rrUegVVRo4TZoDawFx1ARpuIUNUpojB4NFGjqWptjBAETrd+48cCKflxiWExA+kBaKSdDTHf4wWsbf77I+vko0AoAAJMzC0hpDgQBeZuTWwfcnTPEqtU0yWxaYCKWvr36m6L65epi43ehbosDw90UK8GpGnmkqpNh3uSc1juiRZ7BzOjgTIYoBPt/dlUoG6JVeIxxT5Qe1+G9k8hOTq09/ToZjxdyO7WD3eRLIeCksBqhTWWLoYwemFfa9ELtZxymq5plgy1Y54TbRyZ8w1HSklDL+xPu3eD5w+Cm0SkQLv8hzprMhDMJ0FA2DiX3ouV9j6lFXm0GvppDEvlb2IH7zpRx7tjGg4PT6aTEmfS17jmt2UItsiLT0f9MuzBc1D08Hc8Sns2QUiVvGpiLlb0c6/puHyOTDa2gc9wNc96W2RTUx/fp7+Xd34GQ8LYzqD0BDGy3sKBQUI60aGnC53zbYUmJjHRjI1zWFGMkHvCgvmI+yW4gX936Gsuwp9ADf6CygMvSBI8mln0du1i8rKHxA9gCSTcgKVU7NyPvlELsa0zClQAsHRDb1G5hjNne3o6QZd+NRvgIk8PoSF+AoN/oOBnd/Vke0Ht5WOYL4QFvH8eW/MaGW3M1RhAhjy8IcV/8CkHwbI39bl/hd64u1stzQIIou7QXr1Teikt4rpOcZ2xARdrjbU0tnfOprGWDBmWXv+BrC6AwSdawMOaMwLGcS26dJD/Rz+y7LRtHOWtAlVMow5j99REBQMuVTHhu73dndlKnzep1EtCMjX1GfVN9FE/KDZngM+IEg44WKfyWwWd0FTiL7xvNN71zj8ZFmFTFqRR2dPAn/GJBdfdMAzdpil9m+Lvxbmpi08QLmv0ySHmi3n4sbIYQvvJl1AElf+aicxuDhGlQj0lFOZxdylmdnKHu0qzQtG3+NFkhOpFMIlPaTdTLG7I+YMId7py2LpNnW5C/hTgFgUAWfxMyKrWUzOm2565YFgC4OhM0GSwb+Jj7YgKILSq9ESadfQsqnh9Y+vcfj0UcJ8GP4Sy7ok/gnytXhJI7NfaB0xBVYptvkoD0mhr182c3pJzPeJM8DBJFjyWiJni/QcOccBEFl0/cLc3u+3bC8HlGyn1sgXg2NQwpPPpoVNCSyIlqliEjytrj04LxOL8ZQyqmiaE0m4H+y/XW5E+LVg8YFmE7mObAMUZnY7356xoPdU49+BR60VV/7l06zLRrMWwET/vSQKVzLxGDUsKmo2LARO+1HW60TVhLf8+nHEt2o5mdHTiX3pSg4T4TZ+xsGSUtP8HqrR45HVzNd46lD91OUD906riMMUAHU7AWsmcyLs4u/+YMe7VnnqxGLQegbWifnv2shXiSiRKfkWkjgmTZTcvPlhxZdaBpq2S9XegcWWObWdHhZebsfeJtcdnIttcvj1KQcrhfqvIqiZjnT+YwSx+82MTJisXDAYmH4vhfrQcejKWe5R2tTAg7oC05N7PYqUxAZIuxIgb5e+BYuBETsE6V3KYbDR/2Aqb4xEti2GWZbn7NcFUpLoHm9sbEz6McNYCDDh5fQekuDOztgTH5LiTYP1dOrmd0gYA4iJwREeBSnRtMESYWMznkNnxthHxzzN96bhhBqmO18/TB31oMRDQOH0RW79op4NPYMKGoAJfH/RXFK17J37UwCkNQhSGK9RvVmxzyyTvynQYeN85UqwaYzDHtJYg2Z+DFUdScNnoK8y5D0QoIVAvKUb3JwZlIB6GRbVCzH35sBsiwjIf9Vi/LT1sD049YJTmrPNGQYzCOYngfWyoeYwxj5zrjE+kqA64ngTM9ambaN71YMh63eGWOZL1zE57GXm6OdBqFg/5hRRz26OSBiDhvtqEtGpy0MOHSVoRku995jM36u5iUYKEtSwE7NHu5ZLtzIPrwLBqEOI8xLW+YXBJLPfulKvpSFO8hmicGDH5gAtC5vkkg7J9bZH/5VojE15hRwccEYFes/F1ANBTX8KHkshvKzZN9bAqQGz/Rrk1T7/4RhkY0Ja4yIGm14NS1MVI7J15YKA6OTGp6PY1PAL0xQP1ZDQWSsm1azwbvfOMRn7CG4PWsKJ72aGkNWw3MpIKxEneGFQLlRLKVjH6J3QGQWck6H0O0XLCk/Qzy0kjudR4R+70QuObIrkB/cjvEO7CIJ7gr6TCKvoe+QiLxwXJS9S3PmPNDS47D8+fa4NGN/lLx+QYA987y8MnTujumLHgay+tXCd5QeNwjADFjAKiOPd8l+qCALZcikJ+WmDrgavZRIo0pu0f7P8HHmw+QHs/v9QIfHSqK72KyME8vgh69Nrh6u4V27qHGr3JCSRSVizissrPNYeXkmeOmMCYZCyeA6j4/JcpH8GlKb7O4YG/TRTL+S477bwBR5urPyPNb5/u3aPaXtQH1EAKvuumP4wHBSBxY4MWZNycftmsPg+WLXtA3MISK0Msffij9LlqtFsDZzGkz8pVmeeaOUKNsIPwtuKo/NqZ4TuOSbNn7PV4UmK8+xZB03BavPC0oArH+4bYSqQGMsaxD2Yl+HavQ6Q+ox+pHo8ICpxe+XfbMCkpqPTISPS/3MSI0E7YFASNXrqbpzsVW5aX1+FdqlKsiZPnhzn3RPZc9ncQeEBMfw+Ui0Zn8Q9YiQESDLEVOmP+u9Gx50Jj0/DIQEyJB570Ra9UxsfyOls9CnCHZnXN0Thi2A/beXoz5NOvR8AYnegPGaV9T58WNKjIe6YkoNFpkkr/wPSjxjsgo9APoWTvPc5wlsbjLZKe6PSGtWLd/E/mNHAWyFoRtDiVJOSjZZhvr2Y2eOqozZr3IisgBMXzxo/pgsaaZnjP4m0CPOsCWezwMeKEkN5qrh8TvgLNAG2Hlwf4l1hmP1vphxs/BT39gu5irjT9u8dh5G17JcDmRWRbz8DeS2b2hbMGj27PE8YvZAhD3OJogX79pLSYKKRQzRBmg1GILuQqVY3Qg4YeR8BfKMBC1JnQlYgYce17HEyRBgWaWoDkRVe2+G93C3eR9ATNkTDhF5TtdVE/bEmpe2djRkFnraMKGWc7zj/Q9ZTRmq0fCFiyvnzIgSy6exi86EqWv+K+t5T1iBQlWmrqDnxR2Vwjn9dCm69tztTVPL6zdCPJIKlveI+Kldlftf7E6nmDNHFGmV2kpoNg8Dv353kxMnAtEeZU+uAk05aPq4r6y8rvecv1sHLD7BRkTk8AvLDvv+uixN/ryJv5K3w4e2SucNc/7HO2q+MaxpVIOoH6RxOt8gAU1xlzvq29ebM0sTlzX4XsF4hHtkjIKMaB5etffTib34PuL4hX1bPDhj9am0wXmQqutE+wKSY2UnMtcyf/uG6i5Z5FcBkikrF5yXLqU3oH6IugK+jmeJ2K2ci9k8B3KE7xBBtSzVV0R3PbIJfMG1iep16aeQNtEJ7s0qpcWGtHFZYvnh1AY8qRIndkFodOxOA6+gD7nKqpP72z349CtIAi23F9FoodsBPfDBb5AO0AS9RjbabhxakFXAoyQ0sFKYkLAJ6vLW5wZpDSL4+tER/eOkHvCoy8d906a9By+herzO6nlhpUsedOAtgtb4snwvZORTvu7Uh44nFwGNy9ttKEF2dKLvqV5X01ZgpcB28VNpXjSvfGL8t6m9gGpJLL4ZkAT3y/zYkenOtTa/rNzBHs864w2XcY5fR2qeOvpk3bdkFQrm6N3ccvEgMWXRU7B3FSYfTtcSHq+X8wlL9Z+f27cKoufiCdWghf9fQVPHfM5/glZI9YpuhGgDzpro065V0h0KOrA4+UXf7JMVkSIdlUHnsQ3LIVNWZeLbfQBzPBRgnxcnyNyhoqQb0AVWnaGZd9alAHn7HY+n7RoJdOKPtIS40YgmSaxNM0btnwsXwvOdWac1rVsULpCVJ6xKqKXVftvBO1+5uQ5TB5HY3brT4tRkzDcKA3rpYZkWv/UtIas1m9aytpnHO8OA0tPWMoplWCdoZKMPSMffmyunRdPY6o1oojTslEe+n0Dfp5J8T+KtvvBABERDjAY0cCOykzVa99CTAd18BDtQV9bxupyShSnAggoDhQxT1WVHcHAy2FZqrUnLYnYG5L27XKGSU4r56O57eBI/sx3v/00wMATbsePMXjoh3AjzObHuTai9vAhKOKl/uLQtdx1QIgb3xeRPMVvIGLwJEYrOQrkJFTo+AsUmGlkosifqqCwOUz0c1WMJEEB08Tu/8V+Zmp8yTjaDHwnvbOoJtJvYbqB+sOsJcFcQkW8rfEUCDEgQmlkPlvM6W5r8AhuJ4KjUMaTB+VW7rroiwyL0SCbhCH6jLMzqZnYEbrwGoI41rqDU9Ojc="
    }
}

返回类容在这里

但是 content是密文,这里还给了一个 secretkey, 可能是 aes 或者 des (从字面上看来)

import javax.crypto.Cipher;
import javax.crypto.SecretKey;  // 搜素导包关键词看看

desede/CBC/PKCS5Padding

  • key 是返回的 key
  • iv 是 日期

参考python版 3des

运行成品代码

下载代码

方式:

  1. QQ 群文件下载 497377504 (欢迎进群一起讨论学习)
  2. 回复本文后可见下载链接
  3. 博主的 github 下载

此处内容需要评论回复后(审核通过)方可阅读。

Last modification:July 24th, 2020 at 03:03 pm
如果觉得我的文章对你有用,请随意赞赏