|
6精币
输出的结果为:llPoQifXmsReiAnPqnTYq2mdpQrXpcvi----pbkdPYTdeWapucdQ
- package yzg;
- public class getkeyiv {
- private static String TOKEN = null;
- private static byte[] LOGIN_KEY_SEED = null;
- static {
- getkeyiv.LOGIN_KEY_SEED = "This4059is021uleloginShangHaiULE".getBytes();
- getkeyiv.TOKEN = "c8398ea0ae6b495ab703a5bd6a9b6fdb";
- }
- public static void main(String[] arg3) throws Exception {
- String Key = getLoginKey(getkeyiv.TOKEN);
- String Iv = getLoginIv(getkeyiv.TOKEN);
- System.out.print(Key + "----" + Iv);
- }
- public static String getLoginKey(String arg3) throws Exception {
- byte[] v3 = arg3.getBytes();
- getkeyiv.showBytes(v3);
- byte[] v3_1 = getkeyiv.swap12(v3);
- getkeyiv.showBytes(v3_1);
- byte[] v3_2 = getkeyiv.byteXOR(v3_1, getkeyiv.LOGIN_KEY_SEED);
- getkeyiv.showBytes(v3_2);
- return new String(v3_2);
- }
- public static String getLoginIv(String arg4) throws Exception {
- byte[] v1 = arg4.getBytes();
- getkeyiv.showBytes(v1);
- byte[] v1_1 = getkeyiv.swap12(v1);
- getkeyiv.showBytes(v1_1);
- int v4 = arg4.length() / 2;
- byte[] v2 = new byte[v4];
- byte[] v3 = new byte[v4];
- System.arraycopy(((Object) v1_1), 0, ((Object) v2), 0, v4);
- System.arraycopy(((Object) v1_1), v4, ((Object) v3), 0, v4);
- byte[] v4_1 = getkeyiv.byteXOR(v2, v3);
- getkeyiv.showBytes(v4_1);
- return new String(v4_1);
- }
- public static void showBytes(byte[] arg5) {
- StringBuilder v0 = new StringBuilder();
- v0.append("[ ");
- int v2;
- for (v2 = 0; v2 < arg5.length; ++v2) {
- v0.append(arg5[v2] + " ");
- }
- v0.append("]");
- }
- public static byte[] swap12(byte[] arg4) {
- int v0;
- for (v0 = 0; v0 < arg4.length; v0 += 2) {
- byte v1 = arg4[v0];
- int v2 = v0 + 1;
- arg4[v0] = arg4[v2];
- arg4[v2] = v1;
- }
- return arg4;
- }
- public static byte[] byteXOR(byte[] arg6, byte[] arg7) throws Exception {
- if (arg6.length == arg7.length) {
- int v0 = arg6.length <= arg7.length ? arg6.length : arg7.length;
- byte[] v1 = new byte[v0];
- int v3;
- for (v3 = 0; v3 < v0; ++v3) {
- v1[v3] = (byte) (arg6[v3] ^ arg7[v3]);
- }
- int v6;
- for (v6 = 0; v6 < v1.length; ++v6) {
- if ((v1[v6] < 0x30 || v1[v6] > 57) && (v1[v6] < 65 || v1[v6] > 90) && (v1[v6] < 97 || v1[v6] > 0x7A)) {
- v1[v6] = (byte) (Math.abs(v1[v6]) % 25 + 97);
- }
- }
- return v1;
- }
- throw new Exception("两个字节数组长度不一");
- }
- }
复制代码
|
最佳答案
查看完整内容
目测就是位操作啥的也不难 自己耐心点翻译下就行了~
|