首页 > 其他分享 >编码扩展

编码扩展

时间:2024-08-24 11:04:53浏览次数:10  
标签:编码 return duo 扩展 _. str def

二进制


base64

  • python —— base64 encode/decode
    编码解码
class CustomBase64:

    CHAR_SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0!@#$%^&*()-"

    @classmethod
    def encode(cls, s: str) -> str:
        binary_str = ''.join(format(ord(c), '08b') for c in s)  # 转化为二进制字符串
        padding = 3 - (len(s) % 3) if len(s) % 3 else 0  # 计算需要的填充
        binary_str += '0' * (padding * 8)

        index_strs = [binary_str[i:i + 6] for i in range(0, len(binary_str), 6)]
        encoded = ''.join(cls.CHAR_SET[int(index_str, 2)] for index_str in index_strs)

        return encoded[:-padding] + "=" * padding  # 添加填充

    @classmethod
    def decode(cls, s: str) -> str:
        padding = s.count('=')
        s = s.rstrip('=')

        binary_str = ''.join(format(cls.CHAR_SET.index(c), '06b') for c in s)  # 转化为二进制字符串
        byte_strs = [binary_str[i:i + 8] for i in range(0, len(binary_str), 8)][:-padding]

        decoded = ''.join(chr(int(byte_str, 2)) for byte_str in byte_strs)

        return decoded

base64包

base64换表


print(base64.b64decode("SGVsbG*sIFdvcmxkIQ==".translate(str.maketrans("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0!@#$%^&*()-", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))).decode('utf-8'))

使用标准表作为媒介,转换后进行映射

base64隐写

helo -> aGVsbw== 
word -> d29yZA==
helo -> aGVsbw== -> w 48 -> 110000
word -> d29yZA== -> A 0  -> 000000

隐写a->0110 0001

 w 48 -> 110000 -> 110110 -> 54 -> 2
 A 0  -> 000000 -> 000001 -> 1  -> B

编码变为

helo -> aGVsb2==
word -> d29yZB==


文本混淆

社会主义核心价值观编码——有点小问题

import random

import urllib.parse

def assert_(*express):
    l = len(express)
    msg = express[l-1] if isinstance(express[l-1], str) else 'Assert Error'
    for b in express:
        if not b:
            raise AssertionError(msg)

def rand_bin():
    return random.random() >= 0.5

values = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'

def str2utf8(s):
    not_encoded = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~*'()"
    str1 = ''.join([c if c in not_encoded else format(ord(c), 'x') for c in s])
    str2 = urllib.parse.quote(str1)
    concated = str2.replace('%', '').upper()
    return concated

def utf82str(utfs):
    assert_(isinstance(utfs, str), 'utfs Error')
    l = len(utfs)
    assert_((l & 1) == 0)
    splited = []
    for i in range(l):
        if (i & 1) == 0:
            splited.append('%')
        splited.append(utfs[i])
    return urllib.parse.unquote(''.join(splited))

def hex2duo(hexs):
    assert_(isinstance(hexs, str))
    duo = []
    for c in hexs:
        n = int(c, 16)
        if n < 10:
            duo.append(n)
        else:
            if rand_bin():
                duo.append(10)
                duo.append(n - 10)
            else:
                duo.append(11)
                duo.append(n - 6)
    return duo
    
def duo2hex(duo):
    assert_(isinstance(duo, list))
    hexs = []
    l = len(duo)
    i = 0
    while i < l:
        if duo[i] < 10:
            hexs.append(duo[i])
        else:
            i += 1
            if duo[i-1] == 10:
                hexs.append(duo[i] + 10)
            else:
                hexs.append(duo[i] + 6)
        i += 1
    return ''.join([format(v, 'X') for v in hexs])

def duo2values(duo):
    return ''.join([values[2*d] + values[2*d+1] for d in duo])

def values_decode(encoded):
    duo = []
    for c in encoded:
        i = values.find(c)
        if i == -1 or i & 1:
            continue
        duo.append(i >> 1)
    hexs = duo2hex(duo)
    assert_((len(hexs) & 1) == 0)
    try:
        return utf82str(hexs)
    except Exception as e:
        raise e

def values_encode(s):

    return duo2values(hex2duo(str2utf8(s)))

# ------------------

# 假设你有一个简单的命令行界面来代替 HTML 元素

def main():
    while True:
        choice = input("选择操作 (encode/decode/exit): ").strip().lower()
        if choice == 'encode':
            decoded = input("输入要编码的字符串: ").strip()
            encoded = values_encode(decoded)
            print(f"编码结果: {encoded}")
        elif choice == 'decode':
            encoded = input("输入要解码的字符串: ").strip()
            decoded = values_decode(encoded)
            print(f"解码结果: {decoded}")
        elif choice == 'exit':
            break
        else:
            print("无效的选择,请重新输入。")

if __name__ == "__main__":
    main()

兽音译者

beast = ['嗷', '呜', '啊', '~']

def str2hex(text: str):
    ret = ""
    for x in text:
        charHexStr = hex(ord(x))[2:]
        if len(charHexStr) == 3:
            charHexStr = "0" + charHexStr
        elif len(charHexStr) == 2:
            charHexStr = "00" + charHexStr
        ret += charHexStr
    return ret

def hex2str(text: str):
    ret = ""
    for i in range(0, len(text), 4):
        unicodeHexStr = text[i:i + 4]
        charStr = chr(int(unicodeHexStr, 16))
        ret += charStr
    return ret

def encode(str):
    hexArray = list(str2hex(str))
    code = ""
    n = 0
    for x in hexArray:
        k = int(x, 16) + n % 16
        if k >= 16:
            k -= 16
        code += beast[int(k / 4)] + beast[k % 4]
        n += 1
    return code

def decode(str):
    hexArray = list(str)
    code = ""
    for i in range(0, len(hexArray), 2):
        pos1 = beast.index(hexArray[i])
        pos2 = beast.index(hexArray[i + 1])
        k = ((pos1 * 4) + pos2) - (int(i / 2) % 16)
        if k < 0:
            k += 16
        code += hex(k)[2:]
    return hex2str(code)

if __name__ == '__main__':
    print(encode("你好"))
    print(decode("呜嗷嗷嗷啊嗷嗷~啊呜~啊~呜呜嗷"))

一些抽象的

与佛论禅
源版:https://www.keyfc.net/bbs/tools/tudoucode.aspx

GitHub 开源重制:https://github.com/takuron/talk-with-buddha


代码混淆

原文:test

  • jsfuck : (!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]

  • Brainfuck :+++++ +++++ [->++ +++++ +++<] >++++ +++++ +++++ ++.<+ ++[-> ---<] >---- --.<+ ++[-> +++<] >++++ +.+.<

  • JJEncode :_=~[];_={___:++_,$$$$:(![]+"")[_],__$:++_,$_$_:(![]+"")[_],_$_:++_,$_$$:({}+"")[_],$$_$:(_[_]+"")[_],_$$:++_,$$$_:(!""+"")[_],$__:++_,$_$:++_,$$__:({}+"")[_],$$_:++_,$$$:++_,$___:++_,$__$:++_};_.$_=(_.$_=_+"")[_.$_$]+(_._$=_.$_[_.__$])+(_.$$=(_.$+"")[_.__$])+((!_)+"")[_._$$]+(_.__=_.$_[_.$$_])+(_.$=(!""+"")[_.__$])+(_._=(!""+"")[_._$_])+_.$_[_.$_$]+_.__+_._$+_.$;_.$$=_.$+(!""+"")[_._$$]+_.__+_._+_.$+_.$$;_.$=(_.___)[_.$_][_.$_];_.$(_.$(_.$$+"\""+_.__+_.$$$_+"\\"+_.__$+_.$$_+_._$$+_.__+"\"")())();

  • AAEncode:゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');


密码类编码


图片码


中文 wiki- 条形码

  • 二进制转二维码

from PIL import Image

def generate_qrcode_from_binary(binary_str, img_size):

    assert len(binary_str) == img_size[0] * img_size[1], "Size mismatch!"

    pic = Image.new("RGB", img_size, color="white")
    index = 0
    for y in range(img_size[1]):
        for x in range(img_size[0]):
            if binary_str[index] == '1':
                pic.putpixel([x, y], (0, 0, 0))
            index += 1
    return pic

# 示例二进制数据
binary_data = "1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011"  

img_size = (25, 25)
qrcode = generate_qrcode_from_binary(binary_data, img_size)
qrcode.show()
qrcode.save("flag.png")
  • 二维码修复
  • 二维码拼接

tool


URL编码

  • URL 编码,也被称为百分号编码,是一种编码机制,用于将不安全或特殊的字符转换为%后跟其 ASCII 的十六进制表示,以确保 URL 的安全传输。
  • 通常的 url 编码只会处理符号和不可见字符,比如 Squdgy fez, blank jimp crwth vox会被编码为 Squdgy%20fez%2C%20blank%20jimp%20crwth%20vox (普通类型)
  • 但在 CTF 中我们可能会将其编码为%53%71%75%64%67%79%20%66%65%7a%2c%20%62%6c%61%6e%6b%20%6a%69%6d%70%20%63%72%77%74%68%20%76%6f%78 (复杂类型)
  • 甚至出现多次 Url 编码的情况,当然这可能存在一些恶趣味,但是在渗透过程中,多次 url 编码确实是一种有效的 Bypass 手段。

标签:编码,return,duo,扩展,_.,str,def
From: https://www.cnblogs.com/Remakeee/p/18377532

相关文章

  • 下载小说时,python字符集编码utf-8和GBK的错误处理(慎!)
    创作背景  今天想找本小说看,但是居然只能在网页上能找到资源,作为一名测试工程师,这能忍?多么严重的体验,这还能一起愉快的玩耍了吗?还能好好摸鱼了吗?  果断花点时间,查看页面结构,写个脚本自动请求网页,获取小说内容,并进行储存到本地txt文件中,放在手机里,躺在床上慢慢看。没......
  • 哈夫曼树和哈夫曼编码详解(包含Java代码实现)
    目录什么是哈夫曼树?如何构造哈夫曼树?构造过程代码实现哈夫曼树的结构构建哈夫曼树并计算WPL值测试代码什么是哈夫曼编码?如何构建哈夫曼编码?构建过程代码实现什么是哈夫曼树?哈夫曼树又称为最优树,是一类带权路径长度最短的树,在实际中有着广泛的应用。介绍哈夫曼树......
  • Python编码系列—Python单元测试的艺术:深入探索unittest与pytest
    ......
  • 栅格布局在 HarmonyOS 中的应用及扩展
    栅格布局作为一种经典的布局方式,广泛应用于不同类型的用户界面设计,尤其是在移动设备和响应式设计中,它表现出了强大的适应性。本文将深入探讨如何在HarmonyOS中使用栅格布局组件GridRow和GridCol,并通过多种示例来展示栅格布局的灵活性及扩展性。栅格布局的核心优势1.......
  • 程序员的成长之路:平衡编码工作与持续学习
    目录一、引言1.1程序员面临的挑战与机遇1.2日常工作与提升自我学习的矛盾二、高效编码习惯与时间管理技巧2.1模块化设计与代码复用2.2代码质量管理与技术债务的减少2.3使用合适的工具和技术栈2.4时间管理技巧2.4.1番茄工作法2.4.2时间块规划与任务优先级2.......
  • 问题回答:程序员如何平衡日常编码工作与提升式学习?
    程序员如何平衡日常编码工作与提升式学习?在快速迭代的编程世界中,程序员们不仅需要高效完成日常编码任务,还需不断学习新技术、深化专业知识,以应对日益复杂的项目挑战。然而,如何在繁忙琐碎的编码工作与个人成长之间找到平衡,是不少程序员都面临的一个难题。是沉浸在日复一日的工......
  • 技术前沿:WebRTC与H.265编码的兼容性挑战与应对策略
    WebRTC(WebReal-TimeCommunication)是一种支持网页浏览器进行实时语音通话、视频聊天以及P2P文件共享的技术。然而,标准的WebRTCAPI在大多数浏览器中默认并不支持H.265(也称为HEVC,高效视频编码)编码。这主要是因为H.265虽然提供了比H.264更高的压缩效率,但其专利和许可费用问题较为复......
  • WebRTC支持H.265编码:技术挑战与EasyCVR视频汇聚平台解决方案
    随着互联网技术的快速发展,视频通信已成为人们日常生活和工作中不可或缺的一部分。WebRTC(WebReal-TimeCommunication)作为一种实时通信技术,因其便捷性和高效性而受到广泛关注。然而,在视频编码格式上,WebRTC原生并不支持H.265(也称为HEVC,HighEfficiencyVideoCoding),这在一定程度上......
  • 微前端架构:使用不同框架构建可扩展的大型应用
    随着前端技术的发展,构建和维护大型应用变得愈发复杂。传统的单体前端架构逐渐暴露出诸多问题,如代码臃肿、构建时间过长、团队协作困难等。为了解决这些问题,微前端架构应运而生。微前端架构允许我们将一个大型应用拆分成多个独立的子应用,每个子应用可以使用不同的技术栈独立......
  • 国内免费扩展屏推荐,Duet、EV扩展屏的平替,ToDesk免费试用
    随着现代工作和学习方式的转变,多屏显示已成为提升效率的重要工具。多数人都会选择再买一个电子屏幕,作为电脑的第二块屏幕,但随着科技软件的不断发展,逐渐衍生出许多扩展屏软件。这类软件让人们不再需要额外购买一个电子屏幕,反而将家里闲置的平板或手机变成电脑屏幕的扩展屏,这其中以......