zoukankan      html  css  js  c++  java
  • hash解密小助手-python版

    今天再看乌云大会的直播,最后一题用到了DEKHash解密,所以上github搜索了一个小工具,名字叫GeneralHashFunctions.py,出处忘记复制了,就复制了有用的代码,下次遇到出处在粘贴上来。

    #!/usr/local/bin/ python
    # -*- coding: utf-8 -*-
    
    
    def RSHash(key):
        a    = 378551
        b    =  63689
        hash =      0
        for i in range(len(key)):
          hash = hash * a + ord(key[i])
          a = a * b
        return hash
    
    
    def JSHash(key):
        hash = 1315423911
        for i in range(len(key)):
          hash ^= ((hash << 5) + ord(key[i]) + (hash >> 2))
        return hash
    
    
    def PJWHash(key):
       BitsInUnsignedInt = 4 * 8
       ThreeQuarters     = long((BitsInUnsignedInt  * 3) / 4)
       OneEighth         = long(BitsInUnsignedInt / 8)
       HighBits          = (0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth)
       hash              = 0
       test              = 0
    
       for i in range(len(key)):
         hash = (hash << OneEighth) + ord(key[i])
         test = hash & HighBits
         if test != 0:
           hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
       return (hash & 0x7FFFFFFF)
    
    
    def ELFHash(key):
        hash = 0
        x    = 0
        for i in range(len(key)):
          hash = (hash << 4) + ord(key[i])
          x = hash & 0xF0000000
          if x != 0:
            hash ^= (x >> 24)
          hash &= ~x
        return hash
    
    
    def BKDRHash(key):
        seed = 131 # 31 131 1313 13131 131313 etc..
        hash = 0
        for i in range(len(key)):
          hash = (hash * seed) + ord(key[i])
        return hash
    
    
    def SDBMHash(key):
        hash = 0
        for i in range(len(key)):
          hash = ord(key[i]) + (hash << 6) + (hash << 16) - hash;
        return hash
    
    
    def DJBHash(key):
        hash = 5381
        for i in range(len(key)):
           hash = ((hash << 5) + hash) + ord(key[i])
        return hash
    
    
    def DEKHash(key):
        hash = len(key);
        for i in range(len(key)):
          hash = ((hash << 5) ^ (hash >> 27)) ^ ord(key[i])
        return hash
    
    
    def BPHash(key):
        hash = 0
        for i in range(len(key)):
           hash = hash << 7 ^ ord(key[i])
        return hash
    
    
    def FNVHash(key):
        fnv_prime = 0x811C9DC5
        hash = 0
        for i in range(len(key)):
          hash *= fnv_prime
          hash ^= ord(key[i])
        return hash
    
    
    def APHash(key):
        hash = 0xAAAAAAAA
        for i in range(len(key)):
          if ((i & 1) == 0):
            hash ^= ((hash <<  7) ^ ord(key[i]) * (hash >> 3))
          else:
            hash ^= (~((hash << 11) + ord(key[i]) ^ (hash >> 5)))
        return hash
    
    
    print DEKHash('013559111111')
    

      

  • 相关阅读:
    DateTime的精度小问题
    使用For XML PATH 会影响Cross Apply 返回
    一个update的小故事
    行大小计算测试
    Sql Server 2008R2 遇到了BCP导入各种中文乱码的问题
    php-fpm 启动不了 libiconv.so.2找不到
    Git使用教程
    支付宝接口使用文档说明 支付宝异步通知
    Linux(CentOs6.4)安装Git
    NGINX防御CC攻击教程
  • 原文地址:https://www.cnblogs.com/yangxiaodi/p/5656816.html
Copyright © 2011-2022 走看看