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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 表单样式模板_商品表格模板

    表单样式模板_商品表格模板特殊项:用户中心左侧导航:frontend.base.php(增删导航可以在这里改  DW中大约561-760行)apply.index.html                                  申请开店页article.index.html                                 文章分类列表页(包括商城公告、商城公告及其他自建分

    2025年6月10日
    0
  • Python多线程学习

    Python多线程学习一、Python中的线程使用:Python中使用线程有两种方式:函数或者用类来包装线程对象。1、函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:view

    2022年7月5日
    16
  • 什么是多线程?Python多线程有什么优势?「建议收藏」

    什么是多线程?Python多线程有什么优势?「建议收藏」对于初次学习Python这门语言的朋友而言,因为刚刚入门学习Python知识,被问及Python多线程时都会感到一脸懵然,不知道Python多线程是什么意思?也不知道Python多线程有什么好处?这篇

    2022年7月3日
    28
  • 新手上路之oracle 视图 索引(了解)笔记

    新手上路之oracle 视图 索引(了解)笔记一.视图视图:建立在表|结果集|视图上的虚拟表,有以下作用1、简化:select查询语句2、重用:封装select语句命名3、隐藏:内部细节4、区分:相同数据不同查询不是所有的用户都有创建视图的权限1、前提:createview–>组connectresourcedba2、授权:–>sqlplus/nologa)、sys登录connsys

    2022年7月22日
    5
  • pycharm运行代码方法[通俗易懂]

    pycharm运行代码方法[通俗易懂]https://www.cnblogs.com/wangguoyuan-09/p/6866798.html

    2022年8月26日
    2
  • 魔兽世界端口怎么禁止(服务器端口怎么开)

    匿名用户1级2009-03-11回答cn4.grunt.wowchina.com,3724121.14.80.114,121.14.80.115,121.14.80.116,121.14.80.109121.14.80.110,121.14.80.111,121.14.80.112,121.14.80.113[二/六区],cn6.grunt.wowchina.comcn6.grun…

    2022年4月16日
    31

发表回复

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

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