关于仿照js写python算法

前言

我们学校的统一认证的登录系统,用了一套不知道哪弄来的 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行

posted @ 2019-07-24 14:58  Hello_wshuo  阅读(28)  评论(0编辑  收藏  举报