• 劳动节快乐!手写个核心价值观编码工具 Python实现


    前言

    今天是五一劳动节,祝各位无产阶级劳动者节日快乐!

    然后来整活分享一些有趣的东西~

    这个小工具是我大学时做着玩的,对于各位接班人来说,12个词的核心价值观这东西,大家都非常熟悉了,这工具可以实现将一段话编码为核心价值观实现加密,同时也能将密文解密出来。

    为啥要做这个呢,隔太久不太记得了,好像是因为游戏里喷队友老是被屏蔽,灵机一动,要是换成和谐的文字不就不会被屏蔽了吗(误

    实现原理

    简单说下原理,很简单,我们的文字在计算机中表示为ASCII码,对计算机来说所有数据都是0和1,即二进制的,而我们所熟悉的“核心价值观”有12个词,每个词可以表示一位,所以我们可以定义一种新的编码,以“价值观”组成的12进制编码~

    只需要把二进制的ASCII字符转换成12进制的“价值观”编码就可以了。

    开始代码

    搞清楚原理就可以开始写代码了,本文使用Python语言来实现(接下来可能会尝试一下其他语言的实现)

    这里用到了Python的标准库binascii,用来处理ASCII编码,先import进来

    ASCII转2进制可以用binascii标准库实现,转12进制就得我们自己来实现了。

    (当时)考虑到二进制直接转12进制比较麻烦,我折中一下,先2进制转10进制,然后再转12进制

    10进制转12进制的代码如下

    def from_num(input_num: int, b: int) -> int:
        """
        将数字转换为指定进制
        :param input_num: 输入的数字
        :param b: 进制
        :return: 输出结果
        """
        return ((input_num == 0) and "0") or \
               (from_num(input_num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[input_num % b])
    

    前置条件满足了,我们开始来写加密的代码

    def encode(raw: str) -> str:
        """
        编码
        :param raw: 输入的原始字符串
        :return: 返回编码结果
        """
        result = list()
        for char in raw:
            # 把字符转换为16进制字符串
            str_16 = binascii.b2a_hex(char.encode('utf-8'))
            # 把16进制字符串转换为10进制数字
            num_10 = int(str_16, 16)
            str_12 = str(from_num(num_10, 12))
            result.append(char_replace(str_12))
    
        return ','.join(result)
    

    代码很简单,注释里面都写清楚了。

    然后是解密,只需要把加密过程逆向一遍就行

    def decode(encoded: str) -> str:
        """
        解码
        :param encoded: 已编码字符串
        :return: 解码的原始字符串
        """
        str_list = encoded.split(',')
        result = list()
        for char_list in str_list:
            # 整个12进制字符串
            char_12 = ''
            for char in char_list.split(' '):
                # 还原出12进制字符串
                str_12 = str(total_list.index(char))
                if str_12 == '10':
                    str_12 = 'a'
                if str_12 == '11':
                    str_12 = 'b'
                char_12 += str_12
            # 12进制串转换为10进制数
            num_10 = int(char_12, 12)
            str_16 = hex(num_10)
    
            result.append(binascii.a2b_hex(str_16[2:]).decode('utf-8'))
        return ''.join(result)
    

    测试效果

    代码写完了,来测试一下效果如何

    print(encode('劳动节快乐'))
    

    结果

    平等 富强 平等 平等 法治 富强 和谐,平等 富强 平等 平等 公正 友善 自由,平等 民主 文明 友善 自由 富强 文明,平等 富强 公正 民主 平等 文明 和谐,平等 富强 文明 诚信 法治 文明 爱国
    

    有点长,哈哈哈,玩玩就还行

    试试解密

    print(decode('平等 富强 平等 平等 法治 富强 和谐,平等 富强 平等 平等 公正 友善 自由,平等 民主 文明 友善 自由 富强 文明,平等 富强 公正 民主 平等 文明 和谐,平等 富强 文明 诚信 法治 文明 爱国'))
    

    可以正常得到原文

    劳动节快乐
    

    在线测试

    简单写了个页面,大家有兴趣可以玩玩:http://dc.sblt.deali.cn:9800/core-socialist-values/

    PS:加密完发在留言里效果更佳

  • 相关阅读:
    ES6 数值
    ES6 字符串
    ES6 Reflect 与 Proxy
    ES6 Map 与 Set
    es6 Symbol
    新兴的API(fileReader、geolocation、web计时、web worker)
    浏览器数据库 IndexedDB 入门教程
    离线应用与客户端存储(cookie storage indexedDB)
    javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)
    ajax与comet
  • 原文地址:https://www.cnblogs.com/deali/p/16214621.html
Copyright © 2020-2023  润新知