如何用Python实现类似JavaScript的算法编写?

2026-05-24 15:451阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计575个文字,预计阅读时间需要3分钟。

如何用Python实现类似JavaScript的算法编写?

前言:我们学校的统一认证登录系统,使用了一套装未知来源的js加密算法(我已经查到了,应该是出自这里),有一个参数是通过js计算得到的,我不想先模拟登录。

如何用Python实现类似JavaScript的算法编写?

前言

我们学校的统一认证的登录系统,用了一套不知道哪弄来的 js加密算法 (我已经查到了,应该是出自这里 ​​地址​​),有一个参数是通过 js 计算得到的,无奈我先想模拟登录就必须解决这个算法,这个说明是des, 但是和python中的第三方库提供的des算法根本不一样,所以我通过 python 又实现了一遍这个 js 算法

心得

首先要知道 js的几个函数对应 python 中的哪些函数

s 表示字符串,a或b表示索引
剩下的大部分就是写一些逻辑 比如 js 中的 switch-case 可以用python中的 if-elif 来替代
另外就是 js 中复杂的 for循环在python中如何实现,几个例子

for (m = 15; m > j; m--) {
pow *= 2;
}

python中的实现

for m in range(15,j,-1):
pow_ *= 2

这里当然要注意 在 python中的关键字 pow,所以我更改了一下他的名字

for (i = 0, m = 1, n = 0; i < 4; i++, m += 2, n += 2) {
for (j = 7, k = 0; j >= 0; j--, k++) {
ipByte[i * 8 + k] = originalData[j * 8 + m];
ipByte[i * 8 + k + 32] = originalData[j * 8 + n];
}
}for i in range(0,4):
k = 0
for j in range(7,-1,-1):
ipByte[i * 8 + k] = originalData[j * 8 + m]
ipByte[i * 8 + k + 32] = originalData[j * 8 + n]
k += 1
m += 2
n += 2

除了以上的坑 在 python实现js算法最大的坑就是声明数组,js中声明数组

var tempLeft = new Array(32);tempLeft = [0 for i in range(32)]

我通过 python 列表来代替 js 中的数组,初始化都为零
如果不进行初始化 直接 ​​​tempLeft = []​​​ ,在后面给 数组中的元素赋值过程中肯定会报错,但是在js中是不会报错的
所以这里必须,声明 32个元素都为零,让元素存在
所以最坑的是js声明不确定元素多少的数组

var tempLeft = new Array();

这种就没办法了,只能通过逻辑判断声明对应大小的数组

通过以上这些方法,我将 900多行的 js 代码成功的翻译成了python的 500行


作者:Hello_wshuo​


本文共计575个文字,预计阅读时间需要3分钟。

如何用Python实现类似JavaScript的算法编写?

前言:我们学校的统一认证登录系统,使用了一套装未知来源的js加密算法(我已经查到了,应该是出自这里),有一个参数是通过js计算得到的,我不想先模拟登录。

如何用Python实现类似JavaScript的算法编写?

前言

我们学校的统一认证的登录系统,用了一套不知道哪弄来的 js加密算法 (我已经查到了,应该是出自这里 ​​地址​​),有一个参数是通过 js 计算得到的,无奈我先想模拟登录就必须解决这个算法,这个说明是des, 但是和python中的第三方库提供的des算法根本不一样,所以我通过 python 又实现了一遍这个 js 算法

心得

首先要知道 js的几个函数对应 python 中的哪些函数

s 表示字符串,a或b表示索引
剩下的大部分就是写一些逻辑 比如 js 中的 switch-case 可以用python中的 if-elif 来替代
另外就是 js 中复杂的 for循环在python中如何实现,几个例子

for (m = 15; m > j; m--) {
pow *= 2;
}

python中的实现

for m in range(15,j,-1):
pow_ *= 2

这里当然要注意 在 python中的关键字 pow,所以我更改了一下他的名字

for (i = 0, m = 1, n = 0; i < 4; i++, m += 2, n += 2) {
for (j = 7, k = 0; j >= 0; j--, k++) {
ipByte[i * 8 + k] = originalData[j * 8 + m];
ipByte[i * 8 + k + 32] = originalData[j * 8 + n];
}
}for i in range(0,4):
k = 0
for j in range(7,-1,-1):
ipByte[i * 8 + k] = originalData[j * 8 + m]
ipByte[i * 8 + k + 32] = originalData[j * 8 + n]
k += 1
m += 2
n += 2

除了以上的坑 在 python实现js算法最大的坑就是声明数组,js中声明数组

var tempLeft = new Array(32);tempLeft = [0 for i in range(32)]

我通过 python 列表来代替 js 中的数组,初始化都为零
如果不进行初始化 直接 ​​​tempLeft = []​​​ ,在后面给 数组中的元素赋值过程中肯定会报错,但是在js中是不会报错的
所以这里必须,声明 32个元素都为零,让元素存在
所以最坑的是js声明不确定元素多少的数组

var tempLeft = new Array();

这种就没办法了,只能通过逻辑判断声明对应大小的数组

通过以上这些方法,我将 900多行的 js 代码成功的翻译成了python的 500行


作者:Hello_wshuo​