编码解码方式

编码:将原始信息转为编码信息进行传输,解决一些特殊字符、不可见字符的传输问题
解码:将编码信息转为原始信息
https://www.iamwawa.cn/

1、hex

将信息转为十六进制

s="flag"
s1 = s.encode().hex()  #编码,中文字符的解码编码都要加utf-8
s2 = int(s1,16) #转为十进制
s3 = ord('a')  #单字符直接使用ord()
s4 = hex(s2)  #十进制转16进制,并会在前面自动补0x,s4[2:]可以去掉0x,如果是long,末尾加L,可使用[2:-1]
print(s1,s2,s3,s4)  #666c6167 1718378855 97 0x666c6167
f = "你好!"
f1 = f.encode("utf-8").hex()  #中文字符编码
def dec(s):
    if len(s)%2 != 0:  #decode解码时必须保证hex编码的字符串是偶数,如果是奇数,要补0
        s = "0"+s
    return bytes.fromhex(s).decode() #使用fromhex()方法将十六进制字符串转换为字节串,然后使用decode()方法将字节串解码为原始字符串
string = "576f726c6421"
result = dec(string)
print(result)
from Crypto.Util.number import long_to_bytes,bytes_to_long  #将长整型转换为字节串的函数
flag = b"flag{123}"
print(bytes_to_long(flag))
print(long_to_bytes(bytes_to_long(flag)))

2、urlencode

用于浏览器和网站之间的数据交换,在特殊字符hex的基础上,每个字符前加一个“%”,遇到%时,连带%的三个字符对应明文的一个字符
https://www.iamwawa.cn/urldecode.html

flag = b"flag{123!@#$}"
import urllib
f2 = urllib.parse.quote(flag)
print(f2)   #flag%7B123%21%40%23%24%7D
f3 = urllib.parse.unquote(f2)
print(f3)   #flag{123!@#$}

3、morsecode(摩斯电码)

'.‘和’-‘组成,使用’/'分隔
https://www.iamwawa.cn/morse.html
下面是莫斯电码(Morse code)的对照表:

字母:
A: .-       N: -.       0: -----
B: -...     O: ---      1: .----
C: -.-.     P: .--.     2: ..---
D: -..      Q: --.-     3: ...--
E: .        R: .-.      4: ....-
F: ..-.     S: ...      5: .....
G: --.      T: -        6: -....
H: ....     U: ..-      7: --...
I: ..       V: ...-     8: ---..
J: .---     W: .--      9: ----.
K: -.-      X: -..-
L: .-..     Y: -.--
M: --       Z: --..
标点符号和特殊字符:
.: .-.-.-       ,: --..--       ?: ..--..
': .----.       !: -.-.--       /: -..-.
(: -.--.        ): -.--.-       &: .-...
": .-..-.       ;: -.-.-.       =: -...-
+: .-.-.        -: -....-       _: ..--.-
$: ...-..-      @: .--.-.       space: /
[: -.--.-
]: -.--.-
morse_code_dict = {
    'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....',
    'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.',
    'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
    'Y': '-.--', 'Z': '--..',
    '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....',
    '7': '--...', '8': '---..', '9': '----.',
    '.': '.-.-.-',  ',': '--..--', '?': '..--..', '/':'-..-.',   '!': '-.-.--', '@': '.--.-.', '(':'-.--.',
    ')': '-.--.-',  '&':'.-...',   ';': '-.-.-.', '=': '-...-',  '+': '.-.-.',  '-': '-....-', '_': '..--.-',
    '$': '...-..-', '@':'.--.-.',  '[': '-.--.-', ']': '-.--.-'
}
#解码
def decode_morse_code(morse_code):
    morse_code_dict = {
        '.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E',
        '..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J',
        '-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O',
        '.--.': 'P', '--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T',
        '..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y',
        '--..': 'Z', '.----': '1', '..---': '2', '...--': '3', '....-': '4',
        '.....': '5', '-....': '6', '--...': '7', '---..': '8', '----.': '9',
        '-----': '0', '/': ' '
    }
    words = morse_code.split(' / ')
    decoded_text = ''
    for word in words:
        letters = word.split(' ')
        for letter in letters:
            if letter in morse_code_dict:
                decoded_text += morse_code_dict[letter]
        decoded_text += ' '

    return decoded_text.strip()
    # return decoded_text
# morse_code = "- .... . / .-- --- .-. -. .. -. --. / - --- / -.-. --- -- .--. .. .-. . / .- -. -.. / .. ... / -... .-. --- .-- -. / .. ... / - --- / .- / -.-. .- -. / --- ..-. / - .... . / .-- .. -.. . / - --- / -.-. --- -- .--. .. .-. ."
morse_code = "-- --- .-. ... . -.-. --- -.. . .. ... ... --- .. -. - . .-. . ... - .. -. --."
decoded_text = decode_morse_code(morse_code)
print(decoded_text.lower())

4、jsfuck

由“()+[]!”组成的编码

5、uuencode

二进制文件转为可见字符文本的文件,将连续3字节扩展为4字节,取值从32(空白)到95(底线),没有小写字母
https://www.qqxiuzi.cn/bianma/uuencode.php

6、base家族:base16、base32、base64

将特殊字符和不可见字符转为常见字符
base64:a-z,A-Z,0-9,+,/,=
base32:A-Z,2-7,=
base16:A-F,0-9,= base64.b16encode(“flag”).lower() == “flag”.encode().hex()
判断:最后有没有=,“=”用于补位
https://www.qqxiuzi.cn/bianma/base64.htm

import base64
print(base64.b32encode(flag))

参考书目:FlappyPig-CTF特训营:技术详解、解题方法与竞赛技巧

遗传算法的编码方式是将问题的可行解从解空间转换到遗传算法的搜索空间的方法编码的选择直接影响到遗传算法的运算效率。一种常见的编码方式是二进制编码,即将问题的解表示为一串二进制数。这种编码方式简单直观,易于实现。另一种编码方式是格雷码编码,它是对二进制编码的一种变形。格雷码编码的特点是,连续的两个整数所对应的编码值之间仅仅只有一个码位是不相同的,其余码位都完全相同。这种编码方式可以改善遗传算法的局部搜索能力,对于一些连续优化问题较为有效。除了二进制编码和格雷码编码,还有其他一些特定问题中使用编码方式,例如矩阵编码。矩阵编码是针对矩阵运算优化问题提出的一种编码方式,它可以有效地解决编码过长和编码解码复杂的问题。在矩阵编码下,需要设计相应的交叉算子、变异算子和解码公式来进行操作。选择适合问题特点的编码方式可以提高遗传算法的效率和求解能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [遗传算法综述(三、 流程结构与编码解码(二进制编码,格雷码编码浮点数编码、符号编码))](https://blog.csdn.net/a2476100824/article/details/127108635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [矩阵编码的遗传算法](https://download.csdn.net/download/weixin_38674409/12498958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值