
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Python implementation of DataDome's client-side encryption and decryption.
A clean Python implementation of DataDome's client-side encryption and decryption, with a simple classes and practical usage examples.
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.
Install the module from PyPI:
pip install datadome-encryption
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.
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}")
This repository provides a clean, well-documented Python implementation of DataDome's client-side encryption and decryption logic. It is designed for:
For a full technical analysis, reverse engineering details, and a Node.js implementation, see the Node.js version and the Medium article.
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.
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
Install development dependencies:
pip install -r requirements-dev.txt
Run tests with:
pytest
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
Python implementation of DataDome's client-side encryption and decryption.
We found that datadome-encryption demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.