开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 900|回复: 12
打印 上一主题 下一主题
收起左侧

[求助] 求助,关于python语言转易语言!

[复制链接]
结帖率:100% (8/8)
跳转到指定楼层
楼主
发表于 2023-10-22 11:45:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   山东省潍坊市
[Python] 纯文本查看 复制代码
    private static List<String> chats = new ArrayList<>();
 
    static {
        //生成 [a, b, c, d, e, f, g, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        for (int i = 0; i < 7; i++) {
            char c = (char) (i + 97);
            chats.add(String.valueOf(c));
        }
        for (int i = 0; i < 10; i++) {
            char c = (char) (i + 48);
            chats.add(String.valueOf(c));
        }
    }
    /**
     * 获取一次性访问key,参考js方法:
     * De = function() {
          return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) {
          var t = 16 * Math.random() | 0,
          n = "x" === e ? t: 3 & t | 8;
          return n.toString(16)
      }))}
     *
     * @return
     */
    private static String onceKey() {
        List<String> strs = new ArrayList<>();
        Random rd = new Random();
        for (int i = 0; i < 30; i++) {
            strs.add(chats.get(rd.nextInt(chats.size())));
        }
        return String.format("%s%s%s%s%s%s%s%s-%s%s%s%s-4%s%s%s-9%s%s%s-%s%s%s%s%s%s%s%s%s%s%s%s", strs.toArray());
    }
[Python] 纯文本查看 复制代码
private static String sign(String fullUrl, String method, String onceKey) throws Exception {
        final String ekey = "9znpamsyl2c7cdrr9sas0le9vbc3r6ba";
        final String xcakey = "203803574"; // 开发工具 network 请求头 x-ca-key
 
        String[] wholdUrl = fullUrl.split("\\?");
        String url, params = "";
        if ("get".equals(method)) {
            url = wholdUrl[0];
            params = wholdUrl[1];
        } else {
            url = wholdUrl[0];
        }
        String _url = url + (!"".equals(params) ? "?" + params : "");
        String to_enc = "";
        if ("get".equals(method)) {
            to_enc = String.format("GET\napplication/json, text/plain, */*\n\n\n\nx-ca-key:%s\nx-ca-nonce:%s\n%s", xcakey, onceKey, _url);
        } else {
//            to_enc = String.format("POST\n%s\n\n{content_type}\n\nx-ca-key:%s\nx-ca-nonce:%s\n%s"
//                    , accept, content_type, xcakey, onceKey, _url);
        }
        return getSHA256StrJava(to_enc, ekey);
    }
 
    private static String getSHA256StrJava(String content, String secret) throws Exception {
        Mac mac = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
        mac.init(secret_key);
       // System.out.println("key: " + secret + " | 内容是:\n" + content);
        byte[] binaryData = mac.doFinal(content.getBytes());
        return Base64.encodeBase64String(binaryData);
    }
 
结帖率:100% (8/8)
沙发
 楼主| 发表于 2023-10-22 11:47:12 | 只看该作者   山东省潍坊市
两个代码,转一下易语言,精币不够可以加!本人实在看不懂python,有闲时间的大佬来练练手
回复 支持 反对

使用道具 举报

结帖率:100% (26/26)
板凳
发表于 2023-10-22 12:34:24 | 只看该作者   江苏省南京市
那么大的Java你非要说是Python

点评

能转吗。。   山东省潍坊市  发表于 2023-10-22 12:51
回复 支持 反对

使用道具 举报

结帖率:100% (27/27)

签到天数: 8 天

地板
发表于 2023-10-22 12:49:38 | 只看该作者   辽宁省大连市
这不是py代码呀

点评

能转吗,不知道这个   山东省潍坊市  发表于 2023-10-22 12:52
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 6 天

地下
发表于 2023-10-22 13:02:41 | 只看该作者   广东省惠州市
java代码这是

点评

能转吗   山东省潍坊市  发表于 2023-10-22 13:18
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
6
 楼主| 发表于 2023-10-22 13:21:58 高大上手机用户 | 只看该作者   山东省烟台市
来个大佬翻译一下。
回复 支持 反对

使用道具 举报

7
发表于 2023-10-22 13:24:41 | 只看该作者   安徽省合肥市
private static List<String> chats = new ArrayList<>();

// 静态代码块,用于初始化chats列表
static {
    // 生成 [a, b, c, d, e, f, g, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    for (int i = 0; i < 7; i++) {
        char c = (char) (i + 97); // 将数字转换为对应的小写字母
        chats.add(String.valueOf(c)); // 将字符添加到chats列表中
    }
    for (int i = 0; i < 10; i++) {
        char c = (char) (i + 48); // 将数字转换为对应的字符
        chats.add(String.valueOf(c)); // 将字符添加到chats列表中
    }
}

/**
* 获取一次性访问key,参考js方法:
* De = function() {
*   return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) {
*     var t = 16 * Math.random() | 0,
*         n = "x" === e ? t: 3 & t | 8;
*     return n.toString(16)
*   }))}
*
* @Return 返回一个随机生成的一次性访问key
*/
private static String onceKey() {
    List<String> strs = new ArrayList<>();
    Random rd = new Random();
    for (int i = 0; i < 30; i++) {
        strs.add(chats.get(rd.nextInt(chats.size()))); // 从chats列表中随机选择一个字符并添加到strs列表中
    }
    return String.format("%s%s%s%s%s%s%s%s-%s%s%s%s-4%s%s%s-9%s%s%s-%s%s%s%s%s%s%s%s%s%s%s%s", strs.toArray()); // 将strs列表中的字符按照指定格式拼接成一个字符串并返回
}
以上代码定义了一个静态列表 chats,用于存储字符 'a' 到 'g',以及数字 '0' 到 '9'。然后通过静态初始化代码块将这些字符添加到列表中。

接下来是 onceKey 方法,用于生成一个随机的一次性访问key。该方法先创建一个空的字符串列表 strs,然后使用 Random 对象生成随机数,在 chats 列表中随机选择字符,并添加到 strs 中。最后,使用字符串格式化函数将 strs 中的字符按照指定的格式拼接成一次性访问key,并返回该字符串。

请注意,该代码中引用了一个参考的 JavaScript 方法,用于生成一次性访问key。
回复 支持 反对

使用道具 举报

8
发表于 2023-10-22 13:27:14 | 只看该作者   安徽省合肥市
private static String sign(String fullUrl, String method, String onceKey) throws Exception {
    // 定义 ekey 和 xcakey 字符串常量
    final String ekey = "9znpamsyl2c7cdrr9sas0le9vbc3r6ba";
    final String xcakey = "203803574"; // 开发工具 network 请求头 x-ca-key

    // 解析出 url 和参数
    String[] wholdUrl = fullUrl.split("\\?");
    String url, params = "";
    if ("get".equals(method)) {
        url = wholdUrl[0];
        params = wholdUrl[1];
    } else {
        url = wholdUrl[0];
    }
    String _url = url + (!"".equals(params) ? "?" + params : "");  // 拼接 url 和参数为 _url

    String to_enc = "";
    if ("get".equals(method)) {  // 如果是 GET 请求
        // GET 请求需要构造 to_enc 字符串
        to_enc = String.format("GET\napplication/json, text/plain, */*\n\n\n\nx-ca-key:%s\nx-ca-nonce:%s\n%s", xcakey, onceKey, _url);
    } else {
//        to_enc = String.format("POST\n%s\n\n{content_type}\n\nx-ca-key:%s\nx-ca-nonce:%s\n%s"
//                , accept, content_type, xcakey, onceKey, _url);  // POST 请求暂未实现
    }

    // 使用 HmacSHA256 算法和 ekey 计算签名
    return getSHA256StrJava(to_enc, ekey);
}

/**
* 对 content 使用 HmacSHA256 和 secret 计算签名,并返回签名的 Base64 编码
* @param content 待签名的字符串
* @param secret 秘钥
* @Return 签名的 Base64 编码
*/
private static String getSHA256StrJava(String content, String secret) throws Exception {
    // 创建 Mac 和 SecretKeySpec 对象,使用秘钥初始化 Mac 对象
    Mac mac = Mac.getInstance("HmacSHA256");
    SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    mac.init(secret_key);

    // 计算签名
    byte[] binaryData = mac.doFinal(content.getBytes());

    // 返回签名的 Base64 编码
    return Base64.encodeBase64String(binaryData);
}
该代码实现了对字符串 fullUrl、请求方法 method 和一次性访问key onceKey 的签名计算。其中,签名计算方式使用 HmacSHA256 算法和一个秘钥 ekey。

首先,代码定义了两个字符串常量 ekey 和 xcakey,分别为秘钥和网络请求头 x-ca-key。接着,代码解析出 fullUrl 中的 url 和参数,并将它们拼接成 _url 字符串。

然后,如果请求方法是 GET,代码需要构造 to_enc 字符串。该字符串按照固定格式构建,其中包含了 http 请求方法、Content-Type、Accept、x-ca-key、x-ca-nonce 和请求 url 等信息。

最后,代码使用 getSHA256StrJava 方法计算签名,将 to_enc 作为待签名的字符串,ekey 作为秘钥。签名计算完成后,将结果的 Base64 编码作为返回值。

需要注意的是,代码中只实现了 GET 请求的签名计算,POST 请求的签名计算被注释掉了。


两段代码的逐行解释如上,可根据解释转译成易语言格式
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
9
 楼主| 发表于 2023-10-27 17:07:18 | 只看该作者   山东省潍坊市
我去学JS了,不学没法玩
回复 支持 反对

使用道具 举报

10
发表于 2023-11-1 19:44:18 | 只看该作者   江苏省苏州市
这不是py代码呀
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表