返回
谋道翻译解密分析:关键参数与返回数据解码全攻略
前端
2023-12-08 01:19:17
引言
随着科技的飞速发展,机器翻译已成为语言障碍沟通的利器。而作为业内领先的机器翻译平台之一,谋道翻译凭借其精准的翻译质量和丰富的语言支持,深受广大用户的青睐。然而,近期笔者在使用谋道翻译API时,意外发现返回的数据竟是经过加密的。这一发现激起了笔者的好奇心,于是着手深入研究谋道翻译的解密过程,并在此与大家分享这一实战分析。
关键参数分析
在对谋道翻译API的请求进行抓包分析后,笔者发现其关键参数主要包括以下几个:
text
:待翻译的文本内容from
:源语言to
:目标语言appKey
:应用密钥timestamp
:时间戳nonce
:随机数signature
:签名
其中,signature
参数是根据其他参数计算得到的,用于验证请求的合法性。
返回数据解密
谋道翻译的返回数据经过AES对称加密,密钥由appKey
和nonce
共同生成。解密算法如下:
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>
运行
- 将加密后的谋道翻译返回数据复制到文本框中。
- 单击“Decrypt”按钮。
- 解密后的翻译结果将在页面中显示。
总结
通过对谋道翻译API的关键参数和返回数据解密过程的深入分析,笔者为读者提供了全面实用的实战指南。掌握这些知识,工程师们可以轻松破解谋道翻译数据的加密,实现对翻译结果的灵活处理和应用。希望本文能为广大前端逆向爱好者带来启发,推动技术探索的进一步发展。