8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

我在两种语言(JS 和 Java)之间的翻译正确吗?

AndyS 1月前

15 0

请有人告诉我我的代码出了什么问题。我将代码从 JavaScript 翻译成 Java,但我认为其中一定存在问题,因为它不能按预期工作。顺便说一句,我不是……

请有人告诉我我的代码有什么问题。我将代码从 代码有什么问题Script Java ,但我认为其中一定存在问题,因为它不能按预期工作。顺便说一句,我不擅长 JavaScript Java Java ,那就太好了

提示:以下代码是一种加密方法

//...
info = JSON.stringify(info);

                function encode(str, key) {
                    if (str === '') return '';
                    var v = s(str, true);
                    var k = s(key, false);
                    if (k.length < 4) k.length = 4;
                    var n = v.length - 1,
                        z = v[n],
                        y = v[0],
                        c = 0x86014019 | 0x183639A0,
                        m,
                        e,
                        p,
                        q = Math.floor(6 + 52 / (n + 1)),
                        d = 0;

                    while (0 < q--) {
                        d = d + c & (0x8CE0D9BF | 0x731F2640);
                        e = d >>> 2 & 3;

                        for (p = 0; p < n; p++) {
                            y = v[p + 1];
                            m = z >>> 5 ^ y << 2;
                            m += y >>> 3 ^ z << 4 ^ (d ^ y);
                            m += k[p & 3 ^ e] ^ z;
                            z = v[p] = v[p] + m & (0xEFB8D130 | 0x10472ECF);
                        }

                        y = v[0];
                        m = z >>> 5 ^ y << 2;
                        m += y >>> 3 ^ z << 4 ^ (d ^ y);
                        m += k[p & 3 ^ e] ^ z;
                        z = v[n] = v[n] + m & (0xBB390742 | 0x44C6F8BD);
                    }

                    return l(v, false);
                }

                function s(a, b) {
                    var c = a.length;
                    var v = [];

                    for (var i = 0; i < c; i += 4) {
                        v[i >> 2] = a.charCodeAt(i) | a.charCodeAt(i + 1) << 8 | a.charCodeAt(i + 2) << 16 | a.charCodeAt(i + 3) << 24;
                    }

                    if (b) v[v.length] = c;
                    return v;
                }

                function l(a, b) {
                    var d = a.length;
                    var c = d - 1 << 2;

                    if (b) {
                        var m = a[d - 1];
                        if (m < c - 3 || m > c) return null;
                        c = m;
                    }

                    for (var i = 0; i < d; i++) {
                        a[i] = String.fromCharCode(a[i] & 0xff, a[i] >>> 8 & 0xff, a[i] >>> 16 & 0xff, a[i] >>> 24 & 0xff);
                    }

                    return b ? a.join('').substring(0, c) : a.join('');
                }

                return '{SRBX1}' + base64.encode(encode(info, token));
//...
//...
private static String encode(String str,String key) {
        if(str==null||key==null)
            throw new RuntimeException("null is not allowed!");
        if (str == "") return "";
        var v = s(str, true);
        var k = s(key, false);
        if (k.length < 4) Arrays.copyOf(k, 4);
        int n = v.length - 1,
            z = v[n],
            y = v[0],
            c = 0x86014019 | 0x183639A0,
            m,
            e,
            p,
            q = (int)Math.floor(6 + 52 / (n + 1)),
            d = 0;

        while (0 < q--) {
            d = d + c & (0x8CE0D9BF | 0x731F2640);
            e = d >>> 2 & 3;

            for (p = 0; p < n; p++) {
                y = v[p + 1];
                m = z >>> 5 ^ y << 2;
                m += y >>> 3 ^ z << 4 ^ (d ^ y);
                m += k[p & 3 ^ e] ^ z;
                z = v[p] = v[p] + m & (0xEFB8D130 | 0x10472ECF);
            }

            y = v[0];
            m = z >>> 5 ^ y << 2;
            m += y >>> 3 ^ z << 4 ^ (d ^ y);
            m += k[p & 3 ^ e] ^ z;
            z = v[n] = v[n] + m & (0xBB390742 | 0x44C6F8BD);
        }
        String[] v1 = new String[v.length];
        for(int i = 0 ;i<v.length;i++)
            v1[i] = Integer.toString(v[i]);

        return l(v1, false);
    }

    private static int cPointCheck(String a,int cPointIndex){
        if(cPointIndex<a.length())
            return a.codePointAt(cPointIndex);
        else
            return 0;
    }

    private static int[] s(String a, boolean b) {
        var c = a.length();
        var v = new int[c];

        for (var i = 0; i < c; i += 4) {
            v[i >> 2] = cPointCheck(a, i) | cPointCheck(a, i+1) << 8 | cPointCheck(a, i+2) << 16 | cPointCheck(a, i+3) << 24;
        }

        if (b) v[v.length-1] = c;
        return v;
    }

    private static String l(String[]a, boolean b) {
        var d = a.length;
        var c = d - 1 << 2;

        if (b) {
            var m = Integer.parseInt(a[d - 1]);
            if (m < c - 3 || m > c) return null;
            c = m;
        }

        for (var i = 0; i < d; i++) {
            a[i] = new String(new char[]{(char)(Integer.parseInt(a[i]) & (0xff)), (char)(Integer.parseInt(a[i]) >>> 8 & (0xff)), (char)(Integer.parseInt(a[i]) >>> 16 & (0xff)), (char)(Integer.parseInt(a[i]) >>> 24 & (0xff))});
        }

        return b ? String.join("",a).substring(0, c) : String.join("",a);
    }

   public static String getUserInfoEncoded(String info,String token){
        return "{SRBX1}" + encodeUserInfo(encode(info, token));
   }
//...
帖子版权声明 1、本帖标题:我在两种语言(JS 和 Java)之间的翻译正确吗?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由AndyS在本站《java》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 为什么每个变量和函数都只有一个字母?原始代码是经过压缩的吗?调试这个问题应该很简单:使用调试器或在两个版本中每一行之后输出每个变量的值,然后查看它们从哪里开始不同

返回
作者最近主题: