golang调用js代码

前段时间在做QQ空间登录的时候使用python写过一个脚本,需要调用js代码来计算重组密码。
linux搭建比较麻烦,Windows要方便一点。今天这里是要说golang怎么调用js代码,并获取返回值。需要python调用方法的,可以给我留言。

package main

import (
    "fmt"

    "github.com/robertkrimen/otto"
)

func main() {
    vm := otto.New()
    //vm.Run()这里面是javascript代码,下面这段代码,是QQ空间提取出来的。
    vm.Run(`
        function u(x, K) {
        x += '';
        for (var N = [], T = 0; T < K.length; T++) N[T % 4] ^= K.charCodeAt(T);
        var U = ['EC', 'OK'],
        V = [];
        V[0] = x >> 24 & 255 ^ U[0].charCodeAt(0);
        V[1] = x >> 16 & 255 ^ U[0].charCodeAt(1);
        V[2] = x >> 8 & 255 ^ U[1].charCodeAt(0);
        V[3] = x & 255 ^ U[1].charCodeAt(1);
        U = [];
        for (T = 0; T < 8; T++) U[T] = T % 2 == 0 ? N[T >> 1] : V[T >> 1];
        N = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
        V = '';
        for (T = 0; T < U.length; T++) {
            V += N[U[T] >> 4 & 15];
            V += N[U[T] & 15]
        }
        return V
        }

        `)
    //使用vm.Call(函数名,nil,传递的参数,如果后面有多个参数,用逗号隔开就可以了)
    value, _ := vm.Call("u", nil, "12345678", "234")
    fmt.Println(value)
}

共 3 个回复


mm_mysterious

能给我一下python调用的方法吗?

# 1

HobaiRiku

可以用来做自定义函数解码,但是调用js都是es5的不能使用typeArray或者向nodejs一样的Buffer,只能通过number和string处理byte,还是稍微麻烦了。个人觉得要调用js,最好就是nodejs开启一个eval的rpc服务,go语言直接调用,超好用。

# 2