Obfuscate your message with Text Obfuscator
pip install -U textobfuscator
import random
from textobfuscator.obfuscator import TextObfuscator
# 1. Replace char.
# First, now we define rules: replace chars groups.
CHARS_GROUPS_SOURCE_MAP = (
["π―", "π€£"],
["β", "β
"],
)
# 2. Format(Optional)
# Second, let's make some rules to fill the vars that we inserted.
FORMAT_PREFIX_RULES = {
"fake_name": lambda: random.choice(("John", "Min", "William")),
"random_weather": lambda: random.choice(("cloudy", "rainy", "sunny", "windy"))
}
obfuscator = TextObfuscator(
replace_source_map=CHARS_GROUPS_SOURCE_MAP,
format_prefix_rules=FORMAT_PREFIX_RULES,
)
Now we have an instance of TextObfuscator
: obfuscator
, let's do some obfuscations.
from textobfuscator.processor import BreakWord, ObfuscationConfig, Replace
# For each obfuscation, we may specify different rules, such as controls for different words or the number of substitutions, so we make rule here first.
BREAK_WORDS_RULES = [
# We break the word `hello` twice, and put `*` into the middle, like `h*el*lo`
BreakWord(word="hello", places=2, fill="*"),
# We break the word `world` once, and put `-` into the middle, like `wor-ld`
BreakWord(word="world", places=1, fill="-"),
]
OBFUSCATOR_CONFIG = ObfuscationConfig(
# During the entire obfuscation process, we only replace 1 times.
replaces=Replace(count=1),
break_words=BREAK_WORDS_RULES,
)
# OK, let's do the obfuscation.
>>> original1 = "hello world!"
>>> obfuscated = obfuscator.obfuscate(original1, config=OBFUSCATOR_CONFIG)
>>> print(obfuscated)
>>> h*ell*o wor-ld!
>>> original2 = "β hi {fake_name}, today's weather is {random_weather} π―"
>>> obfuscated = obfuscator.obfuscate(original2, config=OBFUSCATOR_CONFIG)
>>> print(obfuscated)
>>> β hi John, today's weather is windy π€£
# Once more.
>>> obfuscated = obfuscator.obfuscate(original2, config=OBFUSCATOR_CONFIG)
>>> print(obfuscated)
>>> β
hi Min, today's weather is sunny π―
- Split content into segments by every args position.
- Break words.
- Break words on each segment.
- Merge all segments and put back all key args in places.
- Replace.
- Temporarily remove all key args.
- Replace matching chars according to the given mapping table and config.
- Put back all key args that removed on above in places.
- Format.
- Merge the
pre-defined
key args and given key args. Herepre-defined
args means we can create custom var generation rules. For example, we can pass config like below to let all vars stars wthdigit
to autofill in with a real digit, and all vars starts withletter
to autofill in with a real letter. And the var with the same name will also be filled with the same value.# config # { # "digit": lambda: random.choice(string.digits), # "letter": lambda: random.choice(string.ascii_letters), # } # before >>> "{digit1} {digit2} {letter2} {digit2}" # after >>> 8 6 z 6
- Format and return the content. Put all args we get to the content, and keep those unknown args in original place.
- Merge the