返回

谋道翻译解密分析:关键参数与返回数据解码全攻略

前端

引言

随着科技的飞速发展,机器翻译已成为语言障碍沟通的利器。而作为业内领先的机器翻译平台之一,谋道翻译凭借其精准的翻译质量和丰富的语言支持,深受广大用户的青睐。然而,近期笔者在使用谋道翻译API时,意外发现返回的数据竟是经过加密的。这一发现激起了笔者的好奇心,于是着手深入研究谋道翻译的解密过程,并在此与大家分享这一实战分析。

关键参数分析

在对谋道翻译API的请求进行抓包分析后,笔者发现其关键参数主要包括以下几个:

  • text:待翻译的文本内容
  • from:源语言
  • to:目标语言
  • appKey:应用密钥
  • timestamp:时间戳
  • nonce:随机数
  • signature:签名

其中,signature参数是根据其他参数计算得到的,用于验证请求的合法性。

返回数据解密

谋道翻译的返回数据经过AES对称加密,密钥由appKeynonce共同生成。解密算法如下:

function decrypt(data, key, nonce) {
  const iv = new ArrayBuffer(16);
  const keyBuffer = new TextEncoder().encode(key);
  const nonceBuffer = new TextEncoder().encode(nonce);
  const cryptoKey = await window.crypto.subtle.importKey(
    "raw",
    keyBuffer,
    "AES-CBC",
    false,
    ["decrypt"]
  );
  const decryptedData = await window.crypto.subtle.decrypt(
    { name: "AES-CBC", iv: iv },
    cryptoKey,
    data
  );
  return new TextDecoder().decode(decryptedData);
}

实战演示

以翻译一段中文文本为例,我们使用Vuex结合Webpack构建一个解密程序。

Vuex Store

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    encryptedData: null,
    decryptedData: null,
  },
  getters: {
    getEncryptedData: (state) => state.encryptedData,
    getDecryptedData: (state) => state.decryptedData,
  },
  mutations: {
    setEncryptedData: (state, data) => (state.encryptedData = data),
    setDecryptedData: (state, data) => (state.decryptedData = data),
  },
  actions: {
    async decryptData({ commit, state, getters }, { appKey, nonce, data }) {
      const decryptedData = await decrypt(
        getters.getEncryptedData,
        appKey,
        nonce
      );
      commit("setDecryptedData", decryptedData);
    },
  },
});

Webpack Config

module.exports = {
  // ...
  plugins: [
    // ...
    new webpack.ProvidePlugin({
      TextEncoder: ["text-encoding", "TextEncoder"],
      TextDecoder: ["text-encoding", "TextDecoder"],
    }),
  ],
};

页面代码

<template>
  <div>
    <input v-model="encryptedData" placeholder="Enter encrypted data" />
    <button @click="decryptData">Decrypt</button>
    <p v-if="decryptedData">{{ decryptedData }}</p>
  </div>
</template>

<script>
import { mapActions, mapGetters } from "vuex";

export default {
  computed: {
    ...mapGetters(["getEncryptedData", "getDecryptedData"]),
  },
  methods: {
    ...mapActions(["decryptData"]),
  },
};
</script>

运行

  1. 将加密后的谋道翻译返回数据复制到文本框中。
  2. 单击“Decrypt”按钮。
  3. 解密后的翻译结果将在页面中显示。

总结

通过对谋道翻译API的关键参数和返回数据解密过程的深入分析,笔者为读者提供了全面实用的实战指南。掌握这些知识,工程师们可以轻松破解谋道翻译数据的加密,实现对翻译结果的灵活处理和应用。希望本文能为广大前端逆向爱好者带来启发,推动技术探索的进一步发展。