劳动节快乐!手写个核心价值观编码工具 - 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:加密完发在留言里效果更佳
劳动节快乐!手写个核心价值观编码工具 - Python实现的更多相关文章
- 30个类手写Spring核心原理之动态数据源切换(8)
本文节选自<Spring 5核心原理> 阅读本文之前,请先阅读以下内容: 30个类手写Spring核心原理之自定义ORM(上)(6) 30个类手写Spring核心原理之自定义ORM(下)( ...
- 手写webpack核心原理,再也不怕面试官问我webpack原理
手写webpack核心原理 目录 手写webpack核心原理 一.核心打包原理 1.1 打包的主要流程如下 1.2 具体细节 二.基本准备工作 三.获取模块内容 四.分析模块 五.收集依赖 六.ES6 ...
- 30个类手写Spring核心原理之环境准备(1)
本文节选自<Spring 5核心原理> 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.Lombok是开 ...
- 30个类手写Spring核心原理之依赖注入功能(3)
本文节选自<Spring 5核心原理> 在之前的源码分析中我们已经了解到,依赖注入(DI)的入口是getBean()方法,前面的IoC手写部分基本流程已通.先在GPApplicationC ...
- 30个类手写Spring核心原理之AOP代码织入(5)
本文节选自<Spring 5核心原理> 前面我们已经完成了Spring IoC.DI.MVC三大核心模块的功能,并保证了功能可用.接下来要完成Spring的另一个核心模块-AOP,这也是最 ...
- 30个类手写Spring核心原理之自定义ORM(上)(6)
本文节选自<Spring 5核心原理> 1 实现思路概述 1.1 从ResultSet说起 说到ResultSet,有Java开发经验的"小伙伴"自然最熟悉不过了,不过 ...
- 深度学习---手写字体识别程序分析(python)
我想大部分程序员的第一个程序应该都是“hello world”,在深度学习领域,这个“hello world”程序就是手写字体识别程序. 这次我们详细的分析下手写字体识别程序,从而可以对深度学习建立一 ...
- 源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)
作者:小傅哥 博客:https://bugstack.cn - 汇总系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 一个知识点的学习过程基本分为:运行helloworld ...
- 30个类手写Spring核心原理之Ioc顶层架构设计(2)
本文节选自<Spring 5核心原理> 1 Annotation(自定义配置)模块 Annotation的代码实现我们还是沿用Mini版本的,保持不变,复制过来便可. 1.1 @GPSer ...
随机推荐
- MySQL 根据JSON类型的字段进行过滤数据的方式
第一种方式:JSON_CONTAINS 函数 : 执行相等形式的比较 注意:值的类型一定要相同,不然会报错 文档地址:https://dev.mysql.com/doc/refman/8.0/en/j ...
- mac 修改环境变量bash_profile除了cd用不了其他命令,又关闭了终端
1.添加命令出错,会导致mac不能使用命令 2.打开终端再添加export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 一条 3.可以使用命令, ...
- js Object扩展自定义方法,jQuery抛出 Uncaught TypeError: matchExpr[type].exec is not a function
使用Jquery的时候,想在Object原型上添加自己扩展的方法的时候,启动项目之后,打开网页就会报如上错误信息,经过测试,可以在Object下的具体类型上进行扩展自定义方法,如String,Arra ...
- 如何给 Spring 容器提供配置元数据?
这里有三种重要的方法给 Spring 容器提供配置元数据. XML 配置文件. 基于注解的配置. 基于 java 的配置.
- nginx 负载均衡详解
配置文件 upstream abc { server 192.168.2.188:8080 weight=1 max_fails=3 fail_timeout=30; 定义集群,weight=权重轮询 ...
- ACM - 最短路 - CodeForces 295B Greg and Graph
CodeForces 295B Greg and Graph 题解 \(Floyd\) 算法是一种基于动态规划的算法,以此题为例介绍最短路算法中的 \(Floyd\) 算法. 我们考虑给定一个图,要找 ...
- 『现学现忘』Docker基础 — 37、ONBUILD指令介绍
目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ...
- 直接使用sublime编译stylus
stylus介绍 Stylus 是一个CSS的预处理框架,2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,所以 Stylus 是一种新型语言,可以创建健壮的.动态的 ...
- 编写大型项目web页面 从写web登陆页面开始
web页面搭建需要准备什么工具 首先我们会和设计师沟通 我们需要一些检验设计的工具 ps 自动裁图 自动测量工具 (我这里安利一下一个工具 我用的cutterman) sketch 可以使用阿里的工具 ...
- node-webkit文档翻译#package.json
title: node-webkit文档翻译#package.json date: 2013-12-07 21:38:25 tags: node-webkit 基本示例 { "main&qu ...