python翻译加密代码时涉及到的移位操作

因为我项目主要是python写的,遇到网站自研加密算法,并且加密代码最多几百行时,我都会翻译成python。

js、Java、c++的移位操作很简单,主要说下python的,100行Java加密代码翻译了我整整一天多....

import ctypes


def int_overflow(val):
    maxint = 2147483647
    if not -maxint-1 <= val <= maxint:
        val = (val + (maxint + 1)) % (2 * (maxint + 1)) - maxint - 1
    return val


def unsigned_right_shitf(n, i):
    if n < 0:
        n = ctypes.c_uint32(n).value
    if i < 0:
        return -int_overflow(n << abs(i))
    return int_overflow(n >> i)

这两个方法从https://www.zhangshengrong.com/p/bYXxZBVdaZ/大佬博客上复制过来的,很nice。

>>是带符号右移,int_overflow(123456789 << 20)

>>>是无符号右移, unsigned_right_shitf(-1, 20)

 

还遇到了Java的int转byte,也是让我捣鼓了半天。

python实现如下:

def int2byte(n):
    if -256 < n < 256:
        return n
    return int2byte(n % -256) if n > 0 else int2byte(n % 256)

 

还有Java byte数组转base64:

def bytes2b64(buffers):
    buffers = [b & 0xff for b in buffers]
    return base64.b64encode(bytes(buffers)).decode()

byte数组转hex:

def bytes2str(buffers):
    return ''.join([format(b & 0xff, 'x') for b in buffers])

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值