murmurhash2算法python3版本

murmurhash2算法python3版本在翻译加密代码时遇到这个murmurhash2算法了,网上找了几个现成的加密结果对不上,自己手动对照原加密翻译了一般python3版本的。#-*-coding:utf-8-*-#@Time:2021/8/2614:40#@Note:Pleasedonotusethisprogramforillegaluses.importctypesdefunsigned_right_shitf(num,bit):returnctypes.c

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在翻译加密代码时遇到这个murmurhash2算法了,网上找了几个现成的加密结果对不上,自己手动对照原加密翻译了一般python3版本的。

# -*- coding: utf-8 -*-
# @ Time    : 2021/8/26 14:40
# @Note: Please do not use this program for illegal uses.

import ctypes


def unsigned_right_shitf(num, bit):
    return ctypes.c_uint32(num).value >> bit


def c_int32(int_num):
    return ctypes.c_int32(int_num).value


def murmurhash2(e, timestamp):
    array_len = len(e)
    f = c_int32(timestamp ^ array_len)
    o = 0
    while array_len >= 4:
        v2 = c_int32(255 & e[o])
        o += 1
        v3 = c_int32((c_int32(255 & e[o])) << 8)
        o += 1
        v4 = c_int32((c_int32(255 & e[o])) << 16)
        o += 1
        v5 = c_int32(c_int32((255 & e[o])) << 24)
        n = c_int32(c_int32(c_int32(v2 | v3) | v4) | v5)
        v1 = c_int32(65535 & n)
        n = 1540483477 * v1 + c_int32((c_int32(1540483477 * (c_int32(n >> 16)) & 65535)) << 16)

        n = c_int32(c_int32(n) ^ c_int32(unsigned_right_shitf(n, 24)))
        n = 1540483477 * (c_int32(65535 & n)) + c_int32((c_int32(1540483477 * (c_int32(n >> 16)) & 65535)) << 16)

        j1 = 1540483477 * (c_int32(65535 & f))
        j2 = c_int32((1540483477 * (c_int32(f >> 16)) & 65535) << 16)
        f = c_int32((j1 + j2) ^ n)

        o += 1
        array_len -= 4
    f = c_int32(f)

    def case1(ff):
        ff = c_int32(ff ^ (c_int32(255 & e[o])))
        return 1540483477 * (c_int32(65535 & ff)) + c_int32((c_int32(1540483477 * (c_int32(ff >> 16)) & 65535)) << 16)

    def case2(ff):
        return c_int32(ff ^ c_int32((c_int32(255 & e[o + 1])) << 8))

    def case3(ff):
        return c_int32(ff ^ c_int32((c_int32(255 & e[o + 2])) << 16))

    if array_len == 1:
        f = case1(f)
    if array_len == 2:
        f = case1(case2(f))
    if array_len == 3:
        f = case1(case2(case3(f)))

    f = c_int32(f ^ unsigned_right_shitf(f, 13))
    f = 1540483477 * (c_int32(65535 & f)) + c_int32((c_int32(1540483477 * unsigned_right_shitf(f, 16) & 65535)) << 16)
    f = c_int32(f ^ unsigned_right_shitf(f, 15))
    print("result:", f)
    return c_int32(unsigned_right_shitf(f, 0) ^ 1540483477)



if __name__ == '__main__':
    murmurhash2(list(b'123abc'), int(time.time()*1000))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180585.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月18日 下午4:16
下一篇 2022年10月18日 下午4:16


相关推荐

  • pycharm将python程序打包_python 程序打包

    pycharm将python程序打包_python 程序打包关于使用Pycharm对python文件进行打包首先建立python项目的时候要按照标准来建设我使用的python配置的解释器,没有使用python的虚拟环境,因为虚拟环境建设出来的项目不是我想要的项目结构,包结构比较多,看着不是很舒服4.配置完成后点击创建创建完成后可以自己创建合适包结构创建完合适的包结构后,就可以编写python代码了,但要python代码运行开,需要配置运行环境9.环境配置调试好就可以运行调试python代码..

    2022年8月26日
    7
  • FPGA与CPLD的比较[通俗易懂]

    FPGA与CPLD的比较[通俗易懂]FPGA基于SRAM的架构,集成度高,以Slice为基本单元,有内嵌Memory、DSP等,支持丰富的IO标准,具有易挥发性,需要有上电加载过程。在实现复杂算法、队列调度、数据处理、高性能设计、大容量缓存设计等领域有广泛应用,如XilinxVirtex系列以及AlteraStratix系列。CPLD基于EEPROM工艺,集成度低,以MicroCell为基本单元。具有非挥发特性,可以重复写入。在粘合逻辑、地址译码、简单控制、FPGA加载等设计中有广泛应用,如XilinxCoolRunner系列以及Al

    2022年6月3日
    36
  • String与StringBuffer的区别

    String与StringBuffer的区别String与StringBuffer的区别简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。String:在String类中没有用来改变已有字

    2026年2月10日
    6
  • Oracle数据库备份与恢复方案

    Oracle数据库备份与恢复方案任何数据库在长期使用过程中,都会存在安全隐患。对于数据库管理员来说不能仅寄希望于计算机操作系统的安全运行,而是要建立一整套的数据库备份与恢复机制。当任何人为的或是自然的灾难一旦出现,而导致数据库崩溃、物理介质损坏等,就可以及时恢复系统中重要的数据,不影响整个单位业务的运作。然而如果没有可靠的备份数据和恢复机制,就会带来系统瘫痪、工作停滞、经济损失等等不堪设想的后果。本文以ORACLE数据库为例,结

    2022年7月14日
    34
  • 详解 JVM Garbage First(G1) 垃圾收集器

    详解 JVM Garbage First(G1) 垃圾收集器版权声明:本文为博主原创文章,转载请联系作者并注明出处。详解JVMGarbageFirst(G1)垃圾收集器前言GarbageFirst(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进

    2022年6月13日
    28
  • 穿越时空 一台家庭NAS能为你带来什么

    穿越时空 一台家庭NAS能为你带来什么

    2022年3月6日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号