{"id":195,"date":"2025-09-09T20:08:26","date_gmt":"2025-09-09T20:08:26","guid":{"rendered":"https:\/\/support.nullflag.com\/?post_type=docs&#038;p=195"},"modified":"2025-10-30T13:55:17","modified_gmt":"2025-10-30T13:55:17","password":"","slug":"javacommon-algorithm","status":"publish","type":"docs","link":"https:\/\/www.nullflag.com\/support\/kb\/encrypt_decrypt\/encryption-android-platform\/javacommon-algorithm\/","title":{"rendered":"JavaCommon Algorithm"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Time Stamp<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Technical Explanation of Timestamps in Reverse Engineering<\/strong><\/h3>\n\n\n\n<p>We will now examine the application of <strong>timestamps<\/strong> in reverse engineering scenarios. Timestamps typically appear in two formats:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Second-level timestamps<\/strong> (10-digit)<\/li>\n\n\n\n<li><strong>Millisecond-level timestamps<\/strong> (13-digit)<\/li>\n<\/ol>\n\n\n\n<p><strong>Key Implementation Notes:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Python Examples:<\/strong><\/li>\n<\/ol>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-09630d6c\"\n     id=\"betterdocs-code-snippet-09630d6c\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-09630d6c .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import time  # Import the time module to handle time-related operations\n\nhiddenText = int(time.time())  # Get current timestamp in seconds (since epoch) and convert to integer\ntest2 = int(time.time() * 1000)  # Get current timestamp in milliseconds and convert to integer\n\nprint(hiddenText)  # Print the seconds timestamp\nprint(test2)  # Print the milliseconds timestamp\n\n\ntest3 = str(int(time.time()))  # string (seconds timestamp)\ntest4 = str(int(time.time()*1000))  # string (milliseconds timestamp)\n\nprint(test3)  # Print the seconds timestamp\nprint(test4)  # Print the milliseconds timestamp<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-09630d6c');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Practical Considerations:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When analyzing network requests (URLs, headers, or bodies), explicitly identify the timestamp digit format<\/li>\n\n\n\n<li>For Java-based second\/millisecond conversion:<\/li>\n\n\n\n<li>Milliseconds to seconds: timestamp \/ 1000<\/li>\n\n\n\n<li>Seconds to milliseconds: timestamp * 1000<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Critical Technical Detail:<\/strong><br>When passing timestamps in request headers (e.g., using Python&#8217;s requests.get()), ensure conversion to string format. correct implementation:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>headers = {'t': str(int(time.time()))}  # String conversion required<\/code><\/pre>\n\n\n\n<p>Recent observations show that failing to stringify timestamp values in request headers consistently causes API errors. This remains one of the most frequent oversights among beginners.<\/p>\n\n\n\n<p>Practical&nbsp;Case&nbsp;Study: Timestamp Handling&nbsp;in Reverse&nbsp;EngineeringScenario: The&nbsp;&#8216;_r<em>ticket&#8217; parameter in&nbsp;an application&#8217;s&nbsp;API<\/em><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"700\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012192006825-1024x700.png\" alt=\"\" class=\"wp-image-196\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192006825-1024x700.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192006825-300x205.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192006825-768x525.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192006825-360x246.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192006825.png 1197w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-4fa65e5d\"\n     id=\"betterdocs-code-snippet-4fa65e5d\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">java<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-4fa65e5d .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>public class Hello {\n\n    public static void main(String[] args) {\n        \/\/ Current timestamp in seconds\n        String t1 = String.valueOf(System.currentTimeMillis() \/ 1000);   \n\n        \/\/ Current timestamp in milliseconds\n        String t2 = String.valueOf(System.currentTimeMillis());\t\t\t\n\n        System.out.println(t1);\n        System.out.println(t2);\n    }\n}\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-4fa65e5d');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Random value<\/h2>\n\n\n\n<p><strong>Analysis of Random Strings in Reverse Engineering<\/strong><\/p>\n\n\n\n<p><strong>whether the observed value is dynamic during reverse engineering<\/strong><\/p>\n\n\n\n<p>Let&#8217;s examine random strings commonly encountered during reverse engineering. While Python&#8217;s random module can easily generate random strings, we need to distinguish between two main types in reverse engineering contexts:<\/p>\n\n\n\n<p>In reverse engineering, you often encounter \u201crandom values.\u201d<br>It mentions that Python can easily generate random strings, for example using random.<\/p>\n\n\n\n<p>Two types of random strings<\/p>\n\n\n\n<p>        Type 1: Contains 26 English letters and digits, like a random combination of letters and numbers.<br>        Type 2: Contains digits, but letters are limited to a\u2013f, which is a typical hexadecimal string.<br>        Don\u2019t mistake it for Base64, because Base64 has a larger character set (A\u2013Z, a\u2013z, 0\u20139, +, \/).<\/p>\n\n\n\n<p>In Java\/Android, generating hex strings is more common because the code is simpler.<\/p>\n\n\n\n<p>If you want to generate random strings with all 26 letters, Java has to create a character array and then randomly combine them, which is more troublesome.<\/p>\n\n\n\n<p>Therefore, in most apps, the random values you see are actually in hexadecimal form.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p>This methodology significantly improves analysis efficiency in real-world scenarios.<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-a0dfe9bd\"\n     id=\"betterdocs-code-snippet-a0dfe9bd\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">java<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-a0dfe9bd .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\nimport java.math.BigInteger;\nimport java.security.SecureRandom;\nimport java.util.UUID;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 11:54\n * @desc\n *\/\n\npublic class Udid_Tool {\n\n        public static void main(String[] args) {\n            \/\/ Randomly generate an 80-bit (10-byte) value\n            BigInteger demo_variable = new BigInteger(80, new SecureRandom());\n            \/\/ Display the bytes in hexadecimal format\n            String resources = demo_variable.toString(16);\n            System.out.println(resources);\n            String uid = UUID.randomUUID().toString();\n            System.out.println(uid);\n        }\n}\n\n\/\/ 82163ea229c6911d791c    \n\/\/ 929d9fef-e6a4-4d08-94bc-85d2b02181c5<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-a0dfe9bd');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>This is the approach being used. Let me show you first. For example, it generates a random number with <strong>BigInteger(80, new SecureRandom())<\/strong>. The <code>80<\/code> here means <strong>80 bits<\/strong>, essentially a sequence of 0s and 1s. Since <strong>8 bits equal 1 byte<\/strong>, 80 bits amount to <strong>10 bytes<\/strong>.<br>Then, those 10 bytes are converted into hexadecimal, producing a string that looks like this.<\/p>\n\n\n\n<p>In Android or Java, this method is very common and convenient for generating random values. Of course, Python can do the same\u2014I\u2019ll explain the Python version later. But for now, just look at this example: in some app code, you can also find similar usage, such as simply writing v4 = &#8230; to get the value.<br><br>real-world example :    openudid<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"779\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012190908863-1024x779.png\" alt=\"\" class=\"wp-image-200\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863-1024x779.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863-300x228.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863-768x584.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863-1536x1168.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863-360x274.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012190908863.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-1158e237\"\n     id=\"betterdocs-code-snippet-1158e237\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Random Hex Generator<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-1158e237 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import random\n\n# =====================================================\n# Basics: Python 3.9+ random.randbytes()\n# =====================================================\n# In Python 3.9 and newer, the random tool got a new function called randbytes(n).\n# It can make n random bytes.\n# A byte is a tiny unit of data. One byte can hold a number from 0 to 255.\n# Here we make 10 random bytes.\ndata = random.randbytes(10)\nprint(data)  \n# Example output: b&#039;\\xec\\xd5\\xd6\\x15+\\x16\\xf9\\xc9\\xee\\x84&#039;\n# The &quot;b&quot; at the start means this is a bytes object, not a normal text string.\n# In bytes, if a letter or symbol is easy to show, Python shows it directly.\n# If not, Python writes it as \\xNN (hex code form).\n\n# Here is a fixed example:\nexample = b&#039;Uq\\xac\\xbb]\\xd7\\x10\\xd7\\x82\\xdb&#039;\n# This is a bytes object with length 10.\n# When Python prints it:\n# - It shows normal letters like &#039;U&#039;, &#039;q&#039;, and &#039;]&#039; directly.\n# - It shows other numbers as \\xNN.\n\n# We can look at each byte one by one:\n# Hex value   Decimal value   Shown as\n# 0x55        85              &#039;U&#039;\n# 0x71        113             &#039;q&#039;\n# 0xAC        172             \\xac\n# 0xBB        187             \\xbb\n# 0x5D        93              &#039;]&#039;\n# 0xD7        215             \\xd7\n# 0x10        16              \\x10 (control symbol, not visible)\n# 0xD7        215             \\xd7\n# 0x82        130             \\x82\n# 0xDB        219             \\xdb\n\n# --- Compare with Java ---\n# In Java, you can make a hex string like this:\n#   new BigInteger(80, new SecureRandom()).toString(16);\n# Python does not have .toString(16),\n# but we can do the same thing by looking at each byte.\n\n# 1. Print a list of numbers (turn bytes into decimal numbers)\nprint([item for item in data])     \n# Example: [82, 153, 158, 19, 92, 148, 251, 29, 30, 227]\n\n# 2. Change each number to hex (with &quot;0x&quot; at the front)\nprint([hex(item) for item in data]) \n# Example: [&#039;0xea&#039;, &#039;0x82&#039;, &#039;0xc6&#039;, ...]\n\n# 3. Remove the &quot;0x&quot; so we keep only the hex numbers\nprint([hex(item)[2:] for item in data])  \n# Example: [&#039;ea&#039;, &#039;82&#039;, &#039;c6&#039;, ...]\n\n# 4. Put all pieces together into one big string\nprint(&quot;&quot;.join([hex(item)[2:] for item in data]))  \n# Example: ea82c66fcceb3314277a\n# This is the same idea as Java\u2019s toString(16)\n\n\n# =====================================================\n# Part 1: Add &quot;0&quot; in front if needed (padding)\n# =====================================================\n# Some apps want each byte to always have 2 hex numbers.\n# Example: &quot;0e&quot; instead of &quot;e&quot;.\n# In Python we can use rjust(2, &quot;0&quot;) to add &quot;0&quot; if it is too short.\nprint(&quot;&quot;.join([hex(item)[2:].rjust(2, &quot;0&quot;) for item in data]))\n# Compare:\n# Without padding: e62f939b2403426bd6\n# With padding:    0e62f939b2403426bd06\n\n\n# =====================================================\n# Part 2: Hex Dump Formatter example\n# =====================================================\nprint([value for value in data]) \n# Print decimal numbers\nprint([hex(value)[2:] for value in data])  \n# Print hex numbers without padding\nprint([hex(value)[2:].rjust(2, &quot;0&quot;) for value in data])\n# Print hex numbers with padding\nprint(&quot;&quot;.join([hex(value)[2:] for value in data]))\n# Join without padding\nprint(&quot;&quot;.join([hex(value)[2:].rjust(2, &quot;0&quot;) for value in data]))\n# Join with padding\n\n\n# =====================================================\n# Part 3: Make a hex string in one line (no padding)\n# =====================================================\ndata = &quot;&quot;.join([hex(value)[2:] for value in random.randbytes(10)])\nprint(data)\n\n\n# =====================================================\n# Part 4: Work with Python 3.8 and older\n# =====================================================\n# Python 3.8 and older do not have randbytes.\n# But remember: a byte is just a number from 0 to 255.\n# So we can use random.randint(0, 255) to make fake bytes.\nbyte_list = [random.randint(0, 255) for i in range(10)]\nprint(byte_list)\n# Example: [59, 212, 35, 55, 82, 62, 137, 149, 83, 3]\n\n\n# =====================================================\n# Part 5: Reminder \u2014 byte range is 0 to 255\n# =====================================================\n# So making random 0\u2013255 numbers is the same as making bytes.\n\n\n# =====================================================\n# Part 6: Full steps in Python 3.8\n# =====================================================\nbyte_list = [random.randint(0, 255) for i in range(10)]\nprint([value for value in byte_list])  # Decimal list\nprint([hex(value)[2:] for value in byte_list])  # Hex list without padding\nprint([hex(value)[2:].rjust(2, &quot;0&quot;) for value in byte_list])  # Hex list with padding\nprint(&quot;&quot;.join([hex(value)[2:].rjust(2, &quot;0&quot;) for value in byte_list]))  # Full hex string\n\n\n# =====================================================\n# Part 7: Make it shorter and fancier\n# =====================================================\n# We can mix making numbers and turning them into hex in one step.\nhex_string = &quot;&quot;.join([hex(random.randint(0, 255))[2:].rjust(2, &quot;0&quot;) for _ in range(10)])\nprint(hex_string)\n\n# This is the Python way to copy Java\u2019s SecureRandom + toString(16).\n# In reverse engineering, you could also &quot;hook&quot; Java\u2019s toString(16) method,\n# and then check if the returned value matches the random string seen in your network packet.\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-1158e237');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">UUID<\/h2>\n\n\n\n<p>Practical&nbsp;Case&nbsp;Study:  The&nbsp;&#8216;udid<em>&#8216; parameter in&nbsp;an application&#8217;s&nbsp;API<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"779\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012191034675-1024x779.png\" alt=\"\" class=\"wp-image-201\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675-1024x779.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675-300x228.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675-768x584.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675-1536x1168.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675-360x274.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191034675.png 1574w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-ed8311f5\"\n     id=\"betterdocs-code-snippet-ed8311f5\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">java<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-ed8311f5 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>import java.util.UUID;\n\npublic class Hello {\n    public static void main(String[] args){\n        String uid = UUID.randomUUID().toString();\n        System.out.println(uid);\n    }\n}<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-ed8311f5');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-fc92975c\"\n     id=\"betterdocs-code-snippet-fc92975c\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">generate uuid by python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-fc92975c .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import uuid\n\nuid = str(uuid.uuid4())\nprint(uid)  \n\n\n# 29cd5f50-4b4c-457b-9a59-33a12e3edd10 <\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-fc92975c');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>1.First type: using UUID<br>        During packet capture, it was found that the value is different for each request, for example:<br>d7cb3695-5105-4aaa-b0a8-8188e0977143<\/p>\n\n\n\n<p>2.UUID generation on first run<br>        &#8211; At the initial startup: call the UUID algorithm to generate a value.<br>        &#8211; Write it into an XML file.<br>        &#8211; Reuse process:<br>        &#8211; First check the XML file for the value.<br>        &#8211; If not found, fall back to the UUID algorithm.<\/p>\n\n\n\n<p>   Testing scenario:<br>        &#8211; Clearing app data alone is not enough.<br>        &#8211; The app must be uninstalled and reinstalled.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hidden Bytes<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-9fdd1884\"\n     id=\"betterdocs-code-snippet-9fdd1884\"\n     data-language=\"javascript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcc4<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">snippet 1<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-9fdd1884 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-javascript\"><code>TreeMap map = new TreeMap();\nmap.put(&quot;sign&quot;,x);\n\n\/\/ Search keyword sign\n\/\/ This is equivalent to:\n\n\/\/ Originally what we saw in the code was map.put(&quot;sign&quot;, x).\n\/\/ But in actual APP runtime, it might not directly hardcode &quot;sign&quot;, but instead construct a string (a) through a byte array, then use it as a key.\n\/\/ So in the source code or decompiled results, you might not see plaintext like &quot;sign&quot;, but rather something like the above new String(new byte[]{...}).<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-9fdd1884');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-048033fc\"\n     id=\"betterdocs-code-snippet-048033fc\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">snippet 2<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-048033fc .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>String a = new String(new byte[]{-26, -83, -90, -26, -78, -101, -23, -67, -112});\nTreeMap map = new TreeMap();\nmap.put(a,x);\n    \n# Hook mechanism: find the put method in TreeMap, and replace it with one of my own methods.\nfunction newPut(key,value){\n    console.log(key,value); then retrieve the call stack\u3002\n}\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-048033fc');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-b54bfba5\"\n     id=\"betterdocs-code-snippet-b54bfba5\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">If we say this is salt<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-b54bfba5 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>String salt = &quot;de36f89ab508f700b5c9&quot;;<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-b54bfba5');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-50fd095e\"\n     id=\"betterdocs-code-snippet-50fd095e\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">If we say this is salt | second (Java Type)<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-50fd095e .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>String hiddenKey = new String(new byte[]{-26, -83, -90, -26, -78, -101, -23, -67, -112});<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-50fd095e');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-a7fd0fd1\"\n     id=\"betterdocs-code-snippet-a7fd0fd1\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">example 1<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-a7fd0fd1 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>String hiddenText = new String(new byte[]{26, 83, 90, 26, 78, 101, 23, 67, 112});<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-a7fd0fd1');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-e176e52e\"\n     id=\"betterdocs-code-snippet-e176e52e\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-e176e52e .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code># Byte list\nbyte_list = [26, 83, 90, 26, 78, 101, 23, 67, 112]\n\n# Byte list -&gt; python\u7684Byte array\nbyteBuffer = bytearray()\nfor value in byte_list:\n    byteBuffer.append(value)\n    \n# python\u7684Byte array -&gt; Encoding -&gt; String\ndecodedString = byteBuffer.decode(&#039;utf-8&#039;)\nprint(decodedString)<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-e176e52e');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-a0c9d186\"\n     id=\"betterdocs-code-snippet-a0c9d186\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Example2<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-a0c9d186 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>String hiddenKey = new String(new byte[]{-26, -83, -90, -26, -78, -101, -23, -67, -112});\n\n# java\u5b57\u8282\uff1aSigned -128 ~ 127\n# python\uff1aUnsigned  0 ~ 255<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-a0c9d186');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-284f2267\"\n     id=\"betterdocs-code-snippet-284f2267\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-284f2267 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>byte_list = [-26, -83, -90, -26, -78, -101, -23, -67, -112]\n\nbyteBuffer = bytearray()  # pythonByte array\nfor value in byte_list:\n    if value &lt; 0:\n        value = value + 256\n    byteBuffer.append(value)\n\ndecodedString = byteBuffer.decode(&#039;utf-8&#039;)  # data = bytes(byteBuffer)\nprint(decodedString)<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-284f2267');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p>Note: What encoding? (utf-8)<br>String hiddenKey = new String(new byte[]{-26, -83, -90, -26, -78, -101, -23, -67, -112});<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-59faa7e3\"\n     id=\"betterdocs-code-snippet-59faa7e3\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-59faa7e3 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code># Similar to a Byte array in Java\ndata = &quot;this is chacter&quot;\ndata_bytes = data.encode(&#039;utf-8&#039;)\n\n\ndata_list = bytearray()\nfor value in data_bytes:\n    data_list.append(value)\n\nresult = data_list.decode(&#039;utf-8&#039;)\nprint(result)<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-59faa7e3');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><strong>Reminder: MD5 encryption salt, AES encryption key, IV<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hexadecimal Strings<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"766\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012191556212-1024x766.png\" alt=\"\" class=\"wp-image-202\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-1024x766.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-300x225.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-768x575.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-1536x1149.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-360x269.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212.png 1677w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-abe36c95\"\n     id=\"betterdocs-code-snippet-abe36c95\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">In Java, bytes are signed: -128 ~ 127<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-abe36c95 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>name_bytes = &quot;Joe Biden&quot;.encode(&#039;utf-8&#039;)  \n# Original line (commented out): encodes Chinese characters to UTF-8 bytes  \n\n\n# name_bytes = [10, -26, -83, -90, -26, -78, -101, -23, -67, -112]  \n# Predefined list of byte values (signed integers)  \n\ndata_list = []  \n# Initialize an empty list to store hexadecimal strings  \n\nfor value in name_bytes:  \n    # Iterate over each byte in name_bytes  \n\n    value = value &amp; 0xff   \n    # Convert signed byte to unsigned (0-255 range) \n    \n    ele = &quot;%02x&quot; % value  \n    # Format the byte as a 2-digit lowercase hexadecimal string  \n\n    data_list.append(ele)  \n    # Append the formatted string to data_list  \n\n    \nprint(&quot;&quot;.join(data_list))  \n# Join all hexadecimal strings and print the result  \n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-abe36c95');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Md5 hash<\/h2>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-5455549e\"\n     id=\"betterdocs-code-snippet-5455549e\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">md5 hash generate by python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-5455549e .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import hashlib\n\nobj = hashlib.md5()\nobj.update(&#039;Joe Biden&#039;.encode(&#039;utf-8&#039;)) # \n\n# This feature does not exist in Java.\nhiddenText = obj.hexdigest()  \n# It produces no output \u2014 the return value is None. \n# It only feeds the data into the hash object obj, \n# which is equivalent to adding &quot;xxxxx&quot; into the MD5 calculation.\n\nprint(hiddenText) # 4d9ff43ee3ddaa56d480f4a8ac2e4798\n\ndigest = obj.digest()\nprint(digest) # b&#039;M\\x9f\\xf4&gt;\\xe3\\xdd\\xaaV\\xd4\\x80\\xf4\\xa8\\xac.G\\x98&#039;<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-5455549e');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-01d0bd4a\"\n     id=\"betterdocs-code-snippet-01d0bd4a\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">filename.js<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-01d0bd4a .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\n\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 12:33\n * @desc\n *\/\n\npublic class Md5Encrypted\n{\n    public static void main(String[] args) throws NoSuchAlgorithmException {\n        String name = &quot;United Sate of America&quot;;\n\n        MessageDigest instance = MessageDigest.getInstance(&quot;MD5&quot;);\n        byte[] nameBytes = instance.digest(name.getBytes());\n\n        \/\/ Display in hexadecimal\n        StringBuilder sb = new StringBuilder();\n        for(int i=0;i&lt;nameBytes.length;i++){\n            int val = nameBytes[i] &amp; 255;  \/\/ Convert negative numbers to positive\n            if (val &lt; 16){\n                sb.append(&quot;0&quot;);\n            }\n            sb.append(Integer.toHexString(val));\n        }\n        String hexData = sb.toString();\n        System.out.println(hexData); \/\/ e6ada6e6b29be9bd90\n    }\n}\n\n\/\/ You can also know what ciphertext it uses when encrypting, do you understand? For example, let&#039;s look at Java, how MD5 encryption is implemented, like this, it&#039;s two steps. Create an MD5 encryption object, then after getting this object, convert your text to bytes, for example, execute its business, right? Execute its list, then you can actually get a result. Look, this is one method, one method, directly pass the value here, directly encrypt it, after getting the encrypted content, I convert it to a hexadecimal string,\n\n\/\/ Then output it, right? If so, can&#039;t you hook the digest method in this class: byte[] nameBytes = instance.digest(name.getBytes());, see what plaintext it passes in, right? Then you can confirm whether it&#039;s actually executed, and also know what the plaintext is during encryption, so you can get it, right? So later you can see, based on this, I give you this method, hook it to my own, for example, pass a body here, this body is a byte, everyone, when you get this byte, isn&#039;t this a byte in Java? That is, convert this string to bytes, if you want to output here, console.log, can&#039;t you first convert Java bytes to string, then output it, after outputting, don&#039;t you know what the plaintext is, then get something else here, look, after execution it gets a result which is nameBytes, which means this result is not the point here, it executes the original encryption, after encryption the result it gets is what, isn&#039;t it another byte array (byte[] nameBytes), then you can based on code we write ourselves, convert this byte array to string console.log(res) and output it, after outputting you know what its ciphertext is, right? It might be here or not, but you can output return res; This way you can prove what its parameter value is, and know, user proves whether it executed this MD5 encryption, additionally compare its hook result with the result you got from packet capture, see if these two are the same, if they&#039;re the same, then this must be where this algorithm is generated, right? So you can also do it based on this mechanism. Execute digest.<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-01d0bd4a');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-7f3f4a28\"\n     id=\"betterdocs-code-snippet-7f3f4a28\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-7f3f4a28 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import hashlib\n\nm = hashlib.md5()  \n# Create an MD5 object\nm.update(&quot;United Sate of America&quot;.encode(&quot;utf-8&quot;))  \n# Update the MD5 object by encoding the string into UTF-8 bytes and adding it to the object\n\nhiddenText = m.digest()  \n# Compute the MD5 hash value and return it as a byte object\nprint(hiddenText)  \n# b&#039;\\xdb5\\xe3:{\\x9a\\xc8\\xde\\xaf\\x8eDF\\xbe\\xe1|\\x82&#039;\n\nfunctionText = m.hexdigest()  \n# Compute the MD5 hash value and return it as a hexadecimal string\nprint(functionText) \n # db35e33a7b9ac8deaf8e4446bee17c82<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-7f3f4a28');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p>About Salt to encryption.<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-5540e06c\"\n     id=\"betterdocs-code-snippet-5540e06c\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">About add salt to encryption On Java<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-5540e06c .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>\npackage EncryptionToolkit;\n\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 16:16\n * @desc\n *\/\n\npublic class Md5SaltEncryption {\n    public static void main(String[] args) throws NoSuchAlgorithmException {\n        String name = &quot;This is a normal string&quot;;\n\n        MessageDigest instance = MessageDigest.getInstance(&quot;MD5&quot;);   \/\/ Create MD5 object\n\n        instance.update(&quot;This is my added salt&quot;.getBytes());\n\n        byte[] nameBytes = instance.digest(name.getBytes());  \/\/ Get the byte encoding\n\n        System.out.println(&quot;Obtained byte encoding - nameBytes ----&gt; &quot; + Arrays.toString(nameBytes));\n\n        String res = new String(nameBytes);\n        System.out.println(&quot;new String - nameBytes --&gt; &quot; + res);\n\n        \/\/ Hexadecimal processing of bytes\n        StringBuilder sb = new StringBuilder();\n        for(int i = 0; i &lt; nameBytes.length; i++){\n            System.out.println(&quot;i value is --&gt; &quot; + i);\n\n            int val = nameBytes[i] &amp; 255;  \/\/ Convert negative numbers to positive\n            if (val &lt; 16){\n                sb.append(&quot;0&quot;);\n            }\n            sb.append(Integer.toHexString(val));\n        }\n        String hexData = sb.toString();\n        System.out.println(hexData); \/\/ 162588573c339c979f695b751a4eabbb\n    }\n}\n\n\n\/\/ \/home\/calleng\/option\/JDK_17.0.12_Oracle\/bin\/java -javaagent:\/home\/calleng\/option\/ideaIU-2023.3.2\/lib\/idea_rt.jar=45599:\/home\/calleng\/option\/ideaIU-2023.3.2\/bin -Dfile.encoding=UTF-8 -classpath \/home\/calleng\/AndroidStudioProjects\/Ja_Ga_bic1\/out\/production\/Ja_Ga_bic1 EncryptionToolkit.Md5SaltEncryption\n\/\/Obtained byte encoding - nameBytes ----&gt; [22, 37, -120, 87, 60, 51, -100, -105, -97, 105, 91, 117, 26, 78, -85, -69]\n\/\/new String - nameBytes --&gt; \u0016%\ufffdW&lt;3\ufffd\ufffd\ufffdi[u\u001aN\ufffd\ufffd\n\/\/i value is --&gt; 0\n\/\/i value is --&gt; 1\n\/\/i value is --&gt; 2\n\/\/i value is --&gt; 3\n\/\/i value is --&gt; 4\n\/\/i value is --&gt; 5\n\/\/i value is --&gt; 6\n\/\/i value is --&gt; 7\n\/\/i value is --&gt; 8\n\/\/i value is --&gt; 9\n\/\/i value is --&gt; 10\n\/\/i value is --&gt; 11\n\/\/i value is --&gt; 12\n\/\/i value is --&gt; 13\n\/\/i value is --&gt; 14\n\/\/i value is --&gt; 15\n\/\/162588573c339c979f695b751a4eabbb\n\/\/\n\/\/Process finished with exit code 0\n\n\/\/ But when doing some development, they not only use digest but also use its update. For example, instance.update(&quot;This is my added salt&quot;.getBytes()); Look, everyone, there&#039;s also this, through this instance.update, for example, they add salt to it, you see, for example, we create an MD5 object, then through instance.update(), for example, add a value inside which is equivalent to adding salt, then call instance.digest() to encrypt it, so some people, when using MD5, they only use update, for example, it&#039;s actually a method. I&#039;ve taken out this third one for everyone,\n\n\n       \/\/ MessageDigest instance = MessageDigest.getInstance(&quot;MD5&quot;);\n      \/\/  byte[] nameBytes = instance.digest(name.getBytes());\n\n\/\/ Ah, for example, this is one encryption method, some people will write it this way. Others might have you write it together like this, it can also support this kind of writing\n\n\n       \/\/ MessageDigest instance = MessageDigest.getInstance(&quot;MD5&quot;);  \n        \/\/instance.update(&quot;This is my added salt&quot;.getBytes());\n        \/\/ byte[] nameBytes = instance.digest(name.getBytes()); \n\n\n\n       \/\/ MessageDigest instance = MessageDigest.getInstance(&quot;MD5&quot;);  \n        \/\/instance.update(&quot;This is my added salt&quot;.getBytes());\n        \/\/ byte[] nameBytes = instance.digest(); \n\n\/\/ These are all executing encryption, because sometimes empty values are passed, some people write it this way, they actually have the same effect during encryption. So if we want to hook it later, can&#039;t we find the update method in MessageDigest to hook? At the same time, find its digest method to hook, so that we can get all the plaintext that might be passed in, right?\n\n\/\/ So after you know this, some people based on this hook mechanism, call it &quot;automatic plaintext export&quot; or &quot;self-spitting algorithm&quot; or similar, actually it&#039;s just a name they gave themselves, in reality it&#039;s implemented based on the hook mechanism.\n\n\/\/ Therefore, to learn this technology, you need to be able to read Java code, know what MD5 looks like, and then write hook scripts based on it. This is the MD5 related content.\n\n\/\/ The MD5 code here is just written by me for demonstration and hasn&#039;t been run. If you want to run it, we just drag the code to the IDE and run it directly.\n\n\/\/ So you need to clearly know the MD5 object and its identifier, it will execute update and digest methods, and then process 16 hexadecimal bytes. Okay, below we look at a screenshot from reverse engineering.<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-5540e06c');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">tiktok\uff1aX-SS-STUB<\/h3>\n\n\n\n<p>Each time a POST request is sent, tiktok includes some request headers:<br>X-SS-STUB = &#8220;4d9ff43ee3ddaa56d480f4a8ac2e4798&#8221;<\/p>\n\n\n\n<p>It reads the data from the request body and performs an MD5 hash on the body content.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"884\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012192151809-1024x884.png\" alt=\"\" class=\"wp-image-203\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192151809-1024x884.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192151809-300x259.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192151809-768x663.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192151809-360x311.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192151809.png 1328w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-6f337564\"\n     id=\"betterdocs-code-snippet-6f337564\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-6f337564 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import hashlib\n\nm = hashlib.md5(&quot;This is a normal string&quot;.encode(&#039;utf-8&#039;))\nm.update(&quot;This is my added salt&quot;.encode(&quot;utf-8&quot;))\n\ndigested_string = m.hexdigest()\nprint(digested_string) # 17351012472429d52d0c0d23d468173d<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-6f337564');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sha-256 Hash<\/h2>\n\n\n\n<p>A real case study, parameters. Youtube: x\/report\/andriod2, Request Body<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"661\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012191522515-1024x661.png\" alt=\"\" class=\"wp-image-204\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515-1024x661.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515-300x194.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515-768x496.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515-1536x991.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515-360x232.png 360w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191522515.png 1942w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"581\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-1024x581.png\" alt=\"\" class=\"wp-image-205\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-1024x581.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-300x170.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-768x436.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-1536x871.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-2048x1162.png 2048w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012191556212-4311753-360x204.png 360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-5acfa107\"\n     id=\"betterdocs-code-snippet-5acfa107\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Sha256Encryption<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-5acfa107 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\n\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 16:09\n * @desc\n *\/\n\npublic class Sha256Encryption {\n    public static void main(String[] args) throws NoSuchAlgorithmException {\n        String name = &quot;This is test String&quot;;\n        MessageDigest instance = MessageDigest.getInstance(&quot;SHA-256&quot;);\n        byte[] nameBytes = instance.digest(name.getBytes());\n        \/\/ System.out.println(Arrays.toString(nameBytes));\n\n        \/\/ String res = new String(nameBytes);\n        \/\/ System.out.println(res);\n\n        \/\/ Display in hexadecimal\n        StringBuilder sb = new StringBuilder();\n        for(int i = 0; i &lt; nameBytes.length; i++){\n            int val = nameBytes[i] &amp; 255;  \/\/ Convert negative numbers to positive\n            if (val &lt; 16){\n                sb.append(&quot;0&quot;);\n            }\n            sb.append(Integer.toHexString(val));\n        }\n        String hexData = sb.toString();\n        System.out.println(hexData); \/\/ 5d68f9caecb326ff4d30e64436021857ec46d47c30b17817d7b0ac663721c480\n    }\n}\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-5acfa107');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-05080467\"\n     id=\"betterdocs-code-snippet-05080467\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">python hashlib.sha256<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-05080467 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import hashlib\n\nm = hashlib.sha256()\nm.update(&quot;This is test String&quot;.encode(&quot;utf-8&quot;))\n\ndigested_value = m.hexdigest()\nprint(digested_value)<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-05080467');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AES Encryption<\/h2>\n\n\n\n<p>Symmetric Encryption<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Key &amp; IV, plaintext encryption. [App side]<\/strong><\/li>\n\n\n\n<li><strong>Key &amp; IV, decryption. [API side]<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Case A: Encrypted request body (garbled text when captured)<\/p>\n\n\n\n<p>Case B: sign, AES encryption + Base64 encoding<\/p>\n\n\n\n<p><strong>When playing videos on youtube, a POST request is sent.<\/strong><\/p>\n\n\n\n<p><strong>AES encryption (on the data in the request body) \u2192 ciphertext (encrypted using the JS youtube Video key<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"540\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012192408372-1024x540.png\" alt=\"\" class=\"wp-image-206\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-1024x540.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-300x158.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-768x405.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-1536x810.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-2048x1080.png 2048w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192408372-360x190.png 360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>description<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"620\" src=\"https:\/\/support.nullflag.com\/wp-content\/uploads\/2025\/09\/image-20211012192555254-1024x620.png\" alt=\"\" class=\"wp-image-207\" srcset=\"https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-1024x620.png 1024w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-300x182.png 300w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-768x465.png 768w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-1536x931.png 1536w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-2048x1241.png 2048w, https:\/\/www.nullflag.com\/support\/wp-content\/uploads\/2025\/09\/image-20211012192555254-360x218.png 360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-86a93aa0\"\n     id=\"betterdocs-code-snippet-86a93aa0\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">AesEncryption<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-86a93aa0 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.spec.IvParameterSpec;\nimport javax.crypto.spec.SecretKeySpec;\nimport java.util.Arrays;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 16:01\n * @desc\n *\/\n\npublic class AesEncryption {\n    public static void main(String[] args) throws Exception {\n        String data = &quot;This is test String&quot;;\n        String key = &quot;17351012472429d52d0c0d23d468173d&quot;;\n        String iv = &quot;e6ada6e69be9bd90&quot;;\n\n        \/\/ Encryption\n        byte[] raw = key.getBytes();\n        SecretKeySpec skeySpec = new SecretKeySpec(raw, &quot;AES&quot;);  \/\/ Create key object\n        \/\/ getEncoded() retrieves the private key of the class as a byte array\n        IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());   \/\/ Create IV object. CBC mode requires an IV vector.\n        \/\/ iv.getIV() \u2192 retrieves the private field [private byte[] iv;] \u2192 returns IV as a byte array\n\n        \/\/ getInstance is just a method from javax.crypto.Cipher\n        Cipher cipher = Cipher.getInstance(&quot;AES\/CBC\/PKCS5Padding&quot;);  \/\/ Instantiate with &quot;algorithm\/mode\/padding&quot;\n\n        \/*\n        The second parameter is the key object\n        The third parameter is the IV object\n         *\/\n        cipher.init(Cipher.ENCRYPT_MODE \/* This is by default integer value 1 *\/, skeySpec \/* key object *\/, ivSpec \/* IV object *\/);\n\n        byte[] encrypted = cipher.doFinal(data.getBytes());\n\n        System.out.println(Arrays.toString(encrypted));\n    }\n}\n\n\/\/ [60, 45, -21, -72, 97, -50, 118, 92, 124, -120, 89, 102, 28, 89, 124, 125, -128, -59, 73, -99, -37, 29, 77, -3, 118, 122, 49, -13, 115, 23, -15, -19]\n<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-86a93aa0');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-5defc97c\"\n     id=\"betterdocs-code-snippet-5defc97c\"\n     data-language=\"javascript\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udcc4<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">pip install pycryptodome<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-5defc97c .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-javascript\"><code># pip install pycryptodome\nfrom Crypto.Cipher import AES\nfrom Crypto.Util.Padding import pad\n\nKEY = &quot;17351012472429d52d0c0d23d468173d&quot;\nIV = &quot;e6ada6e69be9bd90&quot;\n\n\ndef aes_encrypt(data_string):\n    aes = AES.new(\n        key=KEY.encode(&#039;utf-8&#039;),\n        mode=AES.MODE_CBC,\n        iv=IV.encode(&#039;utf-8&#039;)\n    )\n    raw = pad(data_string.encode(&#039;utf-8&#039;), 16)\n    return aes.encrypt(raw)\n\ndata = aes_encrypt(&quot;This is test String&quot;)\nprint(data)\nprint([ i for i in data])\n\n# b&#039;&lt;-\\xeb\\xb8a\\xcev\\\\|\\x88Yf\\x1cY|}\\x80\\xc5I\\x9d\\xdb\\x1dM\\xfdvz1\\xf3s\\x17\\xf1\\xed&#039;\n# [60, 45, 235, 184, 97, 206, 118, 92, 124, 136, 89, 102, 28, 89, 124, 125, 128, 197, 73, 157, 219, 29, 77, 253, 118, 122, 49, 243, 115, 23, 241, 237]<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-5defc97c');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">gzip compress<\/h2>\n\n\n\n<p>TikTok registration device: device.<\/p>\n\n\n\n<p>When registering a device, some values are generated, including: <strong>cdid, phone model, phone brand&#8230;<\/strong>. When the backend receives these values, if it detects that the <strong>cdid<\/strong> is from a completely new request, TikTok will generate: <strong>device_id, install_id, tt<\/strong>.<\/p>\n\n\n\n<p>(cdid, phone model, phone brand, &#8230;) <\/p>\n\n\n\n<p>    &#8211;&gt; GZIP compression (bytes)<br>    &#8211;&gt; Encryption <br>    &#8211;&gt; Ciphertext<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-3aa014f9\"\n     id=\"betterdocs-code-snippet-3aa014f9\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">GzipCompress<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-3aa014f9 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.Arrays;\nimport java.util.zip.GZIPInputStream;\nimport java.util.zip.GZIPOutputStream;\n\n\/**\n * @author calleng\n * @version 1.0\n * @date 2024\/07\/07 16:57\n * @desc\n *\/\n\npublic class GzipCompress { \/\/ Define a GzipCompress class\n\n    public static void main(String[] args) throws IOException { \/\/ Main method, throws IOException\n\n        \/\/ Compression\n        String inputData = &quot;I&#039;m Joe Biden&quot;; \/\/ Define the string data to be compressed\n        System.out.println(Arrays.toString(inputData.getBytes())); \/\/ Convert the string into a byte array and print it\n\n        ByteArrayOutputStream compressedOutputStream = new ByteArrayOutputStream(); \/\/ Store compressed result\n        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(compressedOutputStream); \/\/ GZIP compression stream\n        gzipOutputStream.write(inputData.getBytes()); \/\/ Write the string&#039;s byte array into the compression stream\n        gzipOutputStream.close(); \/\/ Close the compression stream to finish compression\n\n        byte[] compressedBytes = compressedOutputStream.toByteArray(); \/\/ Get compressed byte array\n        System.out.println(Arrays.toString(compressedBytes)); \/\/ Print compressed bytes\n\n        \/\/ Decompression\n        ByteArrayOutputStream decompressedOutputStream = new ByteArrayOutputStream(); \/\/ Store decompressed result\n        ByteArrayInputStream compressedInputStream = new ByteArrayInputStream(compressedBytes); \/\/ Input stream from compressed data\n        GZIPInputStream gzipInputStream = new GZIPInputStream(compressedInputStream); \/\/ GZIP decompression stream\n\n        byte[] buffer = new byte[256]; \/\/ Temporary buffer\n        int bytesRead; \/\/ Number of bytes read per iteration\n\n        while ((bytesRead = gzipInputStream.read(buffer)) &gt;= 0) { \/\/ Read until EOF\n            decompressedOutputStream.write(buffer, 0, bytesRead);\n        }\n\n        byte[] decompressedBytes = decompressedOutputStream.toByteArray(); \/\/ Get decompressed byte array\n        System.out.println(Arrays.toString(decompressedBytes)); \/\/ Print decompressed bytes\n        System.out.println(decompressedOutputStream.toString(&quot;UTF-8&quot;)); \/\/ Convert to string and print\n    }\n}\n\n\n\/\/[73, 39, 109, 32, 74, 111, 101, 32, 66, 105, 100, 101, 110]\n\n\/\/[31, -117, 8, 0, 0, 0, 0, 0, 0, -1, -13, 84, -49, 85, -16, -54, 79, 85, 112, -54, 76, 73, -51, 3, 0, 66, 105, -50, -120, 13, 0, 0, 0]\n\n\/\/[73, 39, 109, 32, 74, 111, 101, 32, 66, 105, 100, 101, 110]\n\/\/I&#039;m Joe Bide<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-3aa014f9');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p>Reminder: Java and Python handle bytes differently. (The representation of byte values may differ, but it does not affect the overall result.)<\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-7110b9f3\"\n     id=\"betterdocs-code-snippet-7110b9f3\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Gzip Python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-7110b9f3 .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import gzip\n\n\n# compress\n\ns_in = &quot;I&#039;m Joe Biden&quot;.encode(&#039;utf-8&#039;)\ns_out = gzip.compress(s_in)\n\nprint([i for i in s_out])\n\n\n# decompress\n\nresult = gzip.decompress(s_out)\nprint(result)\nprint(result.decode(&#039;utf-8&#039;))\n\n#  [31, 139, 8, 0, 197, 84, 189, 104, 2, 255, 243, 84, 207, 85, 240, 202, 79, 85, 112, 202, 76, 73, 205, 3, 0, 66, 105, 206, 136, 13, 0, 0, 0]\n# b&quot;I&#039;m Joe Biden&quot;\n# I&#039;m Joe Biden<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-7110b9f3');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Base64 Encoding<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-30cbf6ff\"\n     id=\"betterdocs-code-snippet-30cbf6ff\"\n     data-language=\"java\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\u2615<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Base64Encode<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-30cbf6ff .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-java\"><code>package EncryptionToolkit;\n\nimport java.util.Base64;\n\npublic class Base64Encode { \/\/ Define Base64Encode class\n    public static void main(String[] args) { \/\/ Main method entry point\n        String name = &quot;I&#039;m Joe Biden&quot;; \/\/ Define the string to be encoded\n\n        \/\/ Encoding\n        Base64.Encoder encoder = Base64.getEncoder(); \/\/ Get a Base64 encoder\n        String res = encoder.encodeToString(name.getBytes()); \/\/ Convert the string into a byte array and encode it with Base64\n        System.out.println(res); \/\/ Print the encoded result\n\n        \/\/ Decoding\n        Base64.Decoder decoder = Base64.getDecoder(); \/\/ Get a Base64 decoder\n        byte[] origin = decoder.decode(res); \/\/ Decode the Base64 string back into the original byte array\n        String data = new String(origin); \/\/ Convert the decoded byte array into a string\n        System.out.println(data); \/\/ Print the decoded result\n    }\n}\n\n\/\/ SSdtIEpvZSBCaWRlbg==\n\/\/ I&#039;m Joe Biden<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-30cbf6ff');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n\n\n\n<div class=\"betterdocs-code-snippet-wrapper theme-light betterdocs-code-snippet-a7eeda4d\"\n     id=\"betterdocs-code-snippet-a7eeda4d\"\n     data-language=\"python\"\n     data-copy-button=\"true\">\n\n            <div class=\"betterdocs-code-snippet-header betterdocs-file-preview-header\">\n        <div class=\"betterdocs-file-preview-left\">\n                            <div class=\"betterdocs-traffic-lights\">\n                    <span class=\"traffic-light traffic-light-red\"><\/span>\n                    <span class=\"traffic-light traffic-light-yellow\"><\/span>\n                    <span class=\"traffic-light traffic-light-green\"><\/span>\n                <\/div>\n            \n            <div class=\"betterdocs-file-info\">\n                                    <div class=\"betterdocs-file-icon\">\n                                                    <span class=\"betterdocs-file-icon-emoji\">\ud83d\udc0d<\/span>\n                                            <\/div>\n                \n                                    <div class=\"betterdocs-file-name\">\n                        <span class=\"file-name-text\">Base64 Encode Python<\/span>\n                    <\/div>\n                            <\/div>\n        <\/div>\n\n        <div class=\"betterdocs-file-preview-right\">\n                            <div class=\"betterdocs-code-snippet-copy-container\">\n                    <button class=\"betterdocs-code-snippet-copy-button\"\n                            type=\"button\"\n                            data-clipboard-target=\"#betterdocs-code-snippet-a7eeda4d .betterdocs-code-snippet-code code\"\n                            aria-label=\"Copy code to clipboard\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                            <path d=\"M16 1H4C2.9 1 2 1.9 2 3V17H4V3H16V1ZM19 5H8C6.9 5 6 5.9 6 7V21C6 22.1 6.9 23 8 23H19C20.1 23 21 22.1 21 21V7C21 5.9 20.1 5 19 5ZM19 21H8V7H19V21Z\" fill=\"currentColor\"\/>\n                        <\/svg>\n                    <\/button>\n                                    <\/div>\n                    <\/div>\n        <\/div>\n    \n    <div class=\"betterdocs-code-snippet-content\">\n        \n        <pre class=\"betterdocs-code-snippet-code language-python\"><code>import base64\n\nname = &quot;I&#039;m Joe Biden&quot;\n\nresult = base64.b64encode(name.encode(&#039;utf-8&#039;))\nprint(result) # b&#039;SSdtIEpvZSBCaWRlbg==&#039;\n\n\ndata = base64.b64decode(result)\norigin = data.decode(&#039;utf-8&#039;)\nprint(origin) # &quot;I&#039;m Joe Biden&quot;<\/code><\/pre>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Initialize copy functionality for this specific snippet\n    const snippet = document.getElementById('betterdocs-code-snippet-a7eeda4d');\n    if (snippet && window.BetterDocsCodeSnippet) {\n        window.BetterDocsCodeSnippet.initCopyButton(snippet);\n    }\n});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Time Stamp Technical Explanation of Timestamps in Reverse Engineering We will now examine the application of timestamps in reverse engineering scenarios. Timestamps typically appear in two formats: Key Implementation Notes: Recent observations show that failing to stringify timestamp values in request headers consistently causes API errors. This remains one of the most frequent oversights among&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"doc_category":[17],"glossaries":[],"doc_tag":[],"knowledge_base":[14],"class_list":["post-195","docs","type-docs","status-publish","hentry","doc_category-encryption-android-platform","knowledge_base-encrypt_decrypt"],"year_month":"2026-05","word_count":792,"total_views":"154","reactions":{"happy":"0","normal":"0","sad":"0"},"author_info":{"display_name":"sandbox","author_link":"https:\/\/www.nullflag.com\/support\/author\/sandbox\/"},"doc_category_info":[{"term_name":"Encryption (Android Platform)","term_url":"https:\/\/www.nullflag.com\/support\/kb\/encrypt_decrypt\/encryption-android-platform\/"}],"doc_tag_info":[],"taxonomy_info":{"doc_category":[{"value":17,"label":"Encryption (Android Platform)"}],"knowledge_base":[{"value":14,"label":"Encrypted and Decrypted"}]},"featured_image_src_large":false,"comment_info":0,"knowledge_base_info":[{"term_name":"Encrypted and Decrypted","term_url":"https:\/\/www.nullflag.com\/support\/kb\/encrypt_decrypt\/","term_slug":"encrypt_decrypt"}],"knowledge_base_slug":["encrypt_decrypt"],"_links":{"self":[{"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/docs\/195","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/comments?post=195"}],"version-history":[{"count":12,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/docs\/195\/revisions"}],"predecessor-version":[{"id":577,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/docs\/195\/revisions\/577"}],"wp:attachment":[{"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/media?parent=195"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/doc_category?post=195"},{"taxonomy":"glossaries","embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/glossaries?post=195"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/doc_tag?post=195"},{"taxonomy":"knowledge_base","embeddable":true,"href":"https:\/\/www.nullflag.com\/support\/wp-json\/wp\/v2\/knowledge_base?post=195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}