rp_miner

Run Settings
LanguagePython
Language Version
Run Command
# @Time : 2025/03/29 8:00:00 # @File : rp_miner.py # @Version : For JRRP 250329 # @Python : >=3.9, <4.0 import multiprocessing from datetime import datetime, timedelta, timezone from hashlib import sha256 from base64 import b85encode TZ = timezone(timedelta(hours=8)) HASH_RANGE = 1 << 256 NAIVE_HASH = HASH_RANGE >> 1 # 在这里设置基本盐的前缀 (字符串) 以及QQ号 (整数) BASE_SALT: str = "基本盐是可空的自定义前缀-" QQ_NUMBER: int = 87654321 def get_prefix(user_id: int) -> bytes: date_str = datetime.now(tz=TZ).strftime("%y%m") prefix_int = int(f"{date_str}{user_id}") n_bytes = (prefix_int.bit_length() + 7) // 8 or 1 return prefix_int.to_bytes(n_bytes, byteorder="big") PREFIX = get_prefix(QQ_NUMBER) def get_sha256_input(salt: str) -> str: return b85encode(PREFIX + sha256(salt.encode()).digest()).decode() def get_hash(text: str) -> int: return int.from_bytes(sha256(text.encode()).digest(), "big") def find_best_salt(chunk: int = 0, chunksize: int = 2**32) -> tuple[str, str]: best_salt = "" best_hash = HASH_RANGE - 1 start = chunk * chunksize end = (chunk + 1) * chunksize format_spec: str = "010x" for i in range(start, end): new_salt = BASE_SALT + format(i, format_spec) text = get_sha256_input(new_salt) if i % 5000000 == 1: value_str = f"{best_hash:#066x}"[2:] value_str_no_leading_zeros = value_str.lstrip("0") leading_zeros_cnt = len(value_str) - len(value_str_no_leading_zeros) print( f"Process:{chunk:02} | Best Salt: {best_salt} | " + f"Hash Value: 0x({leading_zeros_cnt})-{value_str_no_leading_zeros}" ) print(f"Process:{chunk:02} | Checking: {new_salt}") hash_value = get_hash(text) if hash_value < best_hash: print( f"Process:{chunk:02} | Best Salt Updated: {new_salt} | " + f"Hash Value: {hash_value:#066x}" ) best_hash = hash_value best_salt = new_salt return best_salt, f"{best_hash:#066x}" if __name__ == "__main__": num_processes = 8 # 使用多进程 with multiprocessing.Pool(num_processes) as pool: results = pool.map(find_best_salt, range(num_processes)) # results = [find_best_salt()] # 单进程 print(sorted(results, key=lambda x: x[1]))
Editor Settings
Theme
Key bindings
Full width
Lines