You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

datadome-encryption

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

datadome-encryption

Python implementation of DataDome's client-side encryption and decryption.

1.0.0
pipPyPI
Maintainers
1

DataDome Encryption System: Python Implementation

A clean Python implementation of DataDome's client-side encryption and decryption, with a simple classes and practical usage examples.

Status: Complete Type: Research License: MIT PyPI version GitHub stars

Node.js version Read the full article on Medium

Table of Contents

Need DataDome Bypass Solutions?

If you need a reliable DataDome bypass solution for your project, turn to the experts who truly understand the technology. My company, TakionAPI, offers professional anti-bot bypass APIs with proven effectiveness against DataDome and other bot-defense systems.

No more worrying about understanding, reversing, and solving the challenge yourself, or about keeping it up to date every day. One simple API call does it all.

We provide free trials, example implementations, and setup assistance to make the entire process easy and smooth.

Visit TakionAPI.tech for real, high-quality anti-bot bypass solutions — we know what we're doing.

Installation & Quick Start

Install the module from PyPI:

pip install datadome-encryption

Basic Usage Example

import json
from datadome_encryption import DataDomeDecryptor, DataDomeEncryptor

cid = "YOUR_CLIENT_ID"
hash_str = "YOUR_HASH_STRING"
signals = [
    ["key1", "value1"],
    ["key2", 123],
    # ... more key-value pairs
]

# Encryption
encryptor = DataDomeEncryptor(hash_str, cid, ctype="captcha")
for key, value in signals:
    encryptor.add(key, value)
encrypted = encryptor.encrypt()
print('Encrypted:', encrypted)

# Decryption
decryptor = DataDomeDecryptor(hash_str, cid, ctype="captcha")
decrypted = decryptor.decrypt(encrypted)
print('Decrypted:', decrypted)

Replace YOUR_CLIENT_ID and YOUR_HASH_STRING with your actual values. The signals list should contain your key-value pairs to encrypt.

Full Example: Encryption/Decryption Validity Check

import json
from datadome_encryption import DataDomeDecryptor, DataDomeEncryptor

if __name__ == "__main__":
    cid = "k6~sz7a9PBeHLjcxOOWjR162xQq2Uxsx6wLzxeGlO7~6k3JVwDkwAaQ04wdFEMm2Jt2s0y61mLfJdhWuqtqeJzFMuo7Lf8P5btYX0K4EeoLRcNAtNW04rGhTE3nKpMxi"
    hash_str = "14D062F60A4BDE8CE8647DFC720349"
    excepted_encrypted = open("excepted.txt", "r", encoding="utf-8").read()
    original_signals = json.loads(open("original.json", "r", encoding="utf-8").read())
    
    decryptor = DataDomeEncryptor(hash_str, cid, ctype="captcha")
    for key, value in original_signals:
        decryptor.add(key, value)
    encrypted = decryptor.encrypt()

    # We ignore the last char on compilation due to the 
    # fact that is salt based, so unless you pass
    # the same salt it will be a different char based
    # on the timestamp
    print(f"Encryption matches expected?  {encrypted[:-1] == excepted_encrypted[:-1]}")

    decryptor = DataDomeDecryptor(hash_str, cid, ctype="captcha")
    rebuild_decrypted = decryptor.decrypt(encrypted)
    original_decrypted = decryptor.decrypt(excepted_encrypted)

    mismatch = False
    for rebuild, original in zip(rebuild_decrypted, original_decrypted):
        rebuild_key, rebuil_value = rebuild[0], rebuild[1]
        original_key, original_value = original[0], original[1]

        if rebuild_key != original_key or \
            rebuil_value != original_value:
            mismatch = True
            print(f"(ORIGINAL) Mismatch {original_key} {original_value=}")
            print(f"(REBUILD ) Mismatch {rebuild_key} {rebuil_value=}")
            print("*"*20)

    print(f"Got any mismatch on decryption? {mismatch}")

About This Project

This repository provides a clean, well-documented Python implementation of DataDome's client-side encryption and decryption logic. It is designed for:

  • Security researchers
  • Developers integrating with DataDome-protected endpoints
  • Anyone interested in reverse engineering or cryptography

For a full technical analysis, reverse engineering details, and a Node.js implementation, see the Node.js version and the Medium article.

Converting from NodeJS

The hardest part of converting the module from NodeJS to Python was ensuring that all calculations were correctly translated and still executed as 32-bit operations, just as NodeJS/JavaScript does—whereas Python uses 64-bit integers by default.

Author

If you found this project helpful or interesting, consider starring the repo and following me for more security research and tools, or buy me a coffee to keep me up

GitHub Twitter Medium Discord Email Buy Me a Coffee

Development

Running Tests

Install development dependencies:

pip install -r requirements-dev.txt

Run tests with:

pytest

Contributing

Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.